Рассчитать частоту функциональных слов - PullRequest
2 голосов
/ 28 апреля 2011

Я хотел бы рассчитать частоту функциональных слов в Python / NLTK. Я вижу два способа сделать это:

  • Используйте тег «Часть речи» и суммируйте POS-теги, которые составляют функциональные слова
  • Создайте список функциональных слов и выполните простой поиск

Подвох в первом случае заключается в том, что мои данные зашумлены, и я не знаю (точно), какие POS-теги представляют собой слова функций. Подвох во втором случае заключается в том, что у меня нет списка, и поскольку мои данные зашумлены, поиск не будет точным.

Я бы предпочел первый второму или любому другому примеру, который дал бы мне более точные результаты.

Ответы [ 2 ]

5 голосов
/ 01 мая 2011

Я только что использовал 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 (набор инструментов естественного языка) должны быть достаточным указанием для проницательных.

В любом случае, я понимаю и уважаю чувства людей, которые отвечают здесь, поскольку большинство из них бесплатны, но я думаю, что меньшее, что мы можем сделать, - это проявить немного уважения к плакатам с вопросами. Как правильно указано, помощь получается, когда вы помогаете другим, так же, как и уважение, получается, когда другие уважают других.

0 голосов
/ 30 апреля 2011

Вы не знаете, какой подход будет работать, пока не попробуете. Я рекомендую первый подход, хотя; Я с успехом использовал его на очень шумных данных, где «предложения», где заголовки тем по электронной почте (короткие тексты, не правильные предложения) и даже язык были неизвестны (около 85% английского; алгоритм Cavnar & Trenkle быстро сломался) , Успех был определен как увеличение производительности поиска в поисковой системе; если вы просто хотите считать частоты, проблема может быть проще.

Убедитесь, что вы используете POS-тегер, который учитывает контекст (большинство так и делают). Проверьте список слов и частот, которые вы получаете, и, возможно, исключите некоторые слова, которые вы не считаете функциональными словами, или даже отфильтруйте слишком длинные слова; это устранит ложные срабатывания.

(Отказ от ответственности: я использовал POS-тег Stanford, а не NLTK, поэтому YMMV. Я использовал одну из стандартных моделей для английского языка, обученных, я думаю, на Penn Treebank.)

...