FreqDist для наиболее распространенных слов или фраз - PullRequest
1 голос
/ 23 мая 2019

Я пытаюсь проанализировать некоторые данные из обзоров приложений.

Я хочу использовать FreqDist nltk, чтобы увидеть наиболее часто встречающиеся фразы в файле.Это может быть один токен или ключевые фразы.Я не хочу токенизировать данные, потому что это даст мне только самые частые токены.Но прямо сейчас функция FreqDist обрабатывает каждый отзыв как одну строку и не извлекает слова в каждом обзоре.

df = pd.read_csv('Positive.csv')

def pre_process(text):
    translator = str.maketrans("", "", string.punctuation)
    text = text.lower().strip().replace("\n", " ").replace("’", "").translate(translator)
    return text

df['Description'] = df['Description'].map(pre_process)
df = df[df['Description'] != '']

word_dist = nltk.FreqDist(df['Description'])

('Описание' - это тело / сообщение рецензий.)

Например, я хочу получить что-то вроде наиболее часто используемых терминов: "Мне нравится", "полезно", «очень хорошее приложение» Но вместо этого я получаю наиболее часто встречающиеся термины: «Мне действительно нравится это приложение, потому что bablabla» (весь обзор)

И вот почему, когда я строю график FreqDist, я получаю следующее:

enter image description here

1 Ответ

0 голосов
/ 25 мая 2019

TL; DR

Используйте ngrams или everygrams:

>>> from itertools import chain
>>> import pandas as pd
>>> from nltk import word_tokenize
>>> from nltk import FreqDist

>>> df = pd.read_csv('x')
>>> df['Description']
0            Here is a sentence.
1    This is a foo bar sentence.
Name: Description, dtype: object

>>> df['Description'].map(word_tokenize)
0              [Here, is, a, sentence, .]
1    [This, is, a, foo, bar, sentence, .]
Name: Description, dtype: object

>>> sents = df['Description'].map(word_tokenize).tolist()

>>> FreqDist(list(chain(*[everygrams(sent, 1, 3) for sent in sents])))
FreqDist({('sentence',): 2, ('is', 'a'): 2, ('sentence', '.'): 2, ('is',): 2, ('.',): 2, ('a',): 2, ('Here', 'is', 'a'): 1, ('a', 'foo'): 1, ('a', 'sentence'): 1, ('bar', 'sentence', '.'): 1, ...})
...