Распределение частот после лемматизации и удаления стоп-слов - PullRequest
0 голосов
/ 01 мая 2019

Мне нужно прочитать файл mbox.txt и найти его распределение по частоте слов, используя nltk.FreqDist(), а затем вернуть список из десяти наиболее часто встречающихся слов.Однако сначала мне нужно:

  1. Лемматизировать слова
  2. удалить стоп-слова
  3. Сохранять только английские термины
  4. Хранить только термины, принадлежащиеДесять наиболее частых частей речи.

Пример выходных данных:

[('received', 16176), ('id', 12609), ('source', 10792), ('tue', 4498), ('mon', 3686), ('date', 3612), ('sakai', 3611), ('murder', 3594), ('cyrus', 3594), ('postfix', 3594)]

Код, который я написал, -

import nltk, re
from nltk.stem.wordnet import WordNetLemmatizer
from nltk import word_tokenize

tokens = nltk.word_tokenize(open('mbox.txt').read())

lmtzr = nltk.WordNetLemmatizer()
lemmatized = [[lmtzr.lemmatize(word) for word in word_tokenize(t)]
              for t in tokens]

fdist1 = nltk.FreqDist(tokens)
fdist1.most_common(10)

, и у меня есть выводэто:

[(':', 67406), ('--', 43761), (')', 40168), ('(', 40160), ('2007', 22447), ('@', 22019), (';', 21582), (',', 18632), ('from', 16328), ('by', 16231)]

Я действительно не знаю, что я делаю неправильно.Может кто-нибудь сказать мне, что мне не хватает?

1 Ответ

1 голос
/ 01 мая 2019
  1. Вы не вынимая стоп-слова и не английские термины
  2. Вы проверяете FreqDict для лексем, не Леммы

Попробуйте этот код:

import nltk, re
from nltk.stem.wordnet import WordNetLemmatizer
from nltk import word_tokenize

# Regex for only english terms (with dots)
ENGLISH_RE = re.compile(r'[a-z]+')

tokens = nltk.word_tokenize(open('mbox').read())

lmtzr = nltk.WordNetLemmatizer()
# Save the list between tokens
lemmatized = []
for word in tokens:
    # Lowerize for correct use in stopwords etc
    w = word.lower()
    # Check english terms
    if not ENGLISH_RE.match(w):
        continue
    # Check stopwords
    if w in stopwords.words('english'):
        continue
    lemmatized.append(lmtzr.lemmatize(w))

fdist1 = nltk.FreqDist(lemmatized)
fdist1.most_common(10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...