Неструктурированные данные, НЛП Лемматизирует Обзор книг

#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)