читать из текстового файла и делить слова - PullRequest
0 голосов
/ 26 января 2019

Я хотел бы создать программу на python, которая читает текстовый файл как ввод от пользователя. Затем я хотел бы, чтобы программа разделяла слова в следующем примере:

Во время его вступления шведский риксдаг обладал большей властью, чем монархия, но был горько разделен между противоборствующими сторонами.

  • В то время
  • время
  • время его
  • о его вступлении
  • его вступление ...

И я хочу, чтобы эта программа сохранила их в другом файле. есть идеи?

Ответы [ 3 ]

0 голосов
/ 27 января 2019

Вы можете попробовать это, обратите внимание, что это не удастся, если вы не дадите ему хотя бы 3 слова.

def get_words():
    with open("file.txt", "r") as f:
        for word in f.readline().split(" "):
            yield word.replace(",", "").replace(".", "")

with open("output.txt", "w") as f:
    it = get_words()
    current = [""] + [next(it) for _ in range(2)]
    for word in it:
        current = current[1:] + [word]
        f.write(" ".join(current) + "\n")

0 голосов
/ 27 января 2019

Насколько я понимаю, вы хотите сгенерировать n-grams, что является обычной практикой векторизации текста перед выполнением любого НЛП. Вот простая реализация:

from sklearn.feature_extraction.text import CountVectorizer

string = ["At the time of his accession, the Swedish Riksdag held more power than the monarchy but was bitterly divided between rival parties."]
# you can change the ngram_range to get any combination of words
vectorizer = CountVectorizer(encoding='utf-8', stop_words='english', ngram_range=(3,3))

X = vectorizer.fit_transform(string)
print(vectorizer.get_feature_names())

, который даст вам список нграмм длиной 3, но порядок потерян.

[«присоединение шведов», «в то время», «между противоборствующими сторонами», «горько разделено между», «но было горько», «разделено между соперником», «обладало большей властью», «его присоединение к «,« но монархия была »,« больше власти, чем »,« его вступление »,« власть, чем »,« риксдаг держал больше »,« шведский риксдаг держал »,« чем монархия »,« монархия, но », «шведский риксдаг», «время», «время его», «было горько разделено»]

0 голосов
/ 27 января 2019

Вы не указали, в каком формате вы хотите сохранить текст в другом файле.при условии, что вы хотите, чтобы строка за строкой, это будет делать:

def only_letters(word):
    return ''.join(c for c in word if 'a' <= c <= 'z' or 'A' <= c <= 'Z')

with open('input.txt') as f, open('output.txt', 'w') as w:
    s = f.read()
    words = [only_letters(word) for word in s.split()]
    triplets = [words[i:i + 3] for i in range(len(words) - 2)]
    for triplet in triplets:
        w.write(' '.join(triplet) + '\n')
...