Вопрос

Я хотел бы рассчитать частоту Функциональные слова в 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.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top