Рассчитать частоту функциональных слов
-
26-10-2019 - |
Вопрос
Я хотел бы рассчитать частоту Функциональные слова в Python/Nltk. Я вижу два способа сделать это:
- Используйте теги-теги с частями речи и подведите сумму POS-тегов, которые составляют для функционирования слов
- Создайте список функциональных слов и выполните простой поиск
Уловка в первом случае заключается в том, что мои данные шумные, и я не знаю (наверняка), какие теги POS представляют собой функциональные слова. Во втором случае у меня нет списка, и, поскольку мои данные шумные, поиск не будет точным.
Я бы предпочел первый второй или любой другой пример, который бы дал мне более точные результаты.
Решение
Я только что использовал Liwc Английский словарь 2007 года (я заплатил за то же самое) и на данный момент выполнил простой поиск. Любые другие ответы наиболее приветствуются.
Я должен сказать, что я немного удивлен импульсивностью нескольких ответов здесь. С тех пор кто -то попросил код. Вот что я сделал:
''' Returns frequency of function words '''
def get_func_word_freq(words,funct_words):
fdist = nltk.FreqDist([funct_word for funct_word in funct_words if funct_word in words])
funct_freq = {}
for key,value in fdist.iteritems():
funct_freq[key] = value
return funct_freq
''' Read LIWC 2007 English dictionary and extract function words '''
def load_liwc_funct():
funct_words = set()
data_file = open(liwc_dict_file, 'rb')
lines = data_file.readlines()
for line in lines:
row = line.rstrip().split("\t")
if '1' in row:
if row[0][-1:] == '*' :
funct_words.add(row[0][:-1])
else :
funct_words.add(row[0])
return list(funct_words)
Любой, кто сделал какой -то код в Python, скажет вам, что выполнение поиска или извлечения слов с помощью конкретных POS -тегов - это ракетостроение. Чтобы добавить, теги (по вопросу) NLP (обработка естественного языка) и NLTK (инструментарий естественного языка) должны быть достаточными показателями для проницательных.
В любом случае, я понимаю и уважаю настроения людей, которые отвечают здесь, так как большая часть этого бесплатна, но я думаю, что самое меньшее, что мы можем сделать, это проявить немного уважения к вопросам. Поскольку это справедливо указывается на помощь, когда вы помогаете другим, аналогично уважение получается, когда один уважает другие.
Другие советы
Вы не знаете, какой подход будет работать, пока вы не попробуете. Я рекомендую первый подход, хотя; Я использовал его с успехом в очень шумных данных, где «предложения», где заголовки предметов электронной почты (короткие тексты, не надлежащие предложения) и даже язык был неизвестен (около 85% английского; алгоритм Cavnar & Trenkle быстро распался) сломался) сломался) сломался) сломался) сломался) сломался) сломался) сломал алгоритм Cavnar & Trenkle. Анкет Успех был определен как повышенная производительность поиска в поисковой системе; Если вы просто хотите считать частоты, проблема может быть проще.
Убедитесь, что вы используете POS -теггер, который учитывает контекст (большинство делает). Осмотрите список слов и частот, которые вы получаете, и, возможно, устраните некоторые слова, которые вы не рассматриваете функциональные слова, или даже отфильтровать слова, которые слишком длинные; Это устранит ложные позитивы.
(Отказ от ответственности: я использовал Stanford POS -Tagger, а не NLTK, так что YMMV. Я использовал одну из моделей по умолчанию для английского языка, я думаю, обученная, я думаю, на Penn Treebank.)