#python #nltk #file-writing #file-read #lemmatization
Вопрос:
Здесь я пытаюсь прочитать содержание, скажем так ‘book1.txt» и здесь я должен удалить все специальные символы и знаки препинания, а также маркировать содержимое словами с помощью маркера слов nltk. Лемматизируйте эти маркеры с помощью WordNetLemmatizer И записывайте эти маркеры в csv-файл один за другим. Вот код, который я использую, который, очевидно, не работает, но мне просто нужно какое-то предложение по этому поводу, пожалуйста.
import nltk
from nltk.stem import WordNetLemmatizer
import csv
from nltk.tokenize import word_tokenize
file_out=open('data.csv','w')
with open('book1.txt','r') as myfile:
for s in myfile:
words = nltk.word_tokenize(s)
words=[word.lower() for word in words if word.isalpha()]
for word in words:
token=WordNetLemmatizer().lemmatize(words,'v')
filtered_sentence=[""]
for n in words:
if n not in token:
filtered_sentence.append("" n)
file_out.writelines(filtered_sentence ["n"])
Ответ №1:
Здесь есть некоторые проблемы, особенно с последними 2 циклами for.
То, как вы это делаете, заставило его написать это следующим образом:
word1
word1word2
word1word2word3
word1word2word3word4
........etc
Я предполагаю, что это не ожидаемый результат. Я предполагаю, что ожидаемый результат будет:
word1
word2
word3
word4
........etc (without creating duplicates)
Я применил приведенный ниже код к 3-параграфному файлу Cat Ipsum. Обратите внимание, что я изменил некоторые имена переменных из-за моих собственных соглашений об именовании.
import nltk
nltk.download('punkt')
nltk.download('wordnet')
from nltk.stem import WordNetLemmatizer
from nltk.tokenize import word_tokenize
from pprint import pprint
# read the text into a single string.
with open("book1.txt") as infile:
text = ' '.join(infile.readlines())
words = word_tokenize(text)
words = [word.lower() for word in words if word.isalpha()]
# create the lemmatized word list
results = []
for word in words:
# you were using words instead of word below
token = WordNetLemmatizer().lemmatize(word, "v")
# check if token not already in results.
if token not in results:
results.append(token)
# sort results, just because :)
results.sort()
# print and save the results
pprint(results)
print(len(results))
with open("nltk_data.csv", "w") as outfile:
outfile.writelines(results)