计算功能词的频率

时间:2011-04-28 14:00:37

标签: python nlp nltk word-frequency part-of-speech

我想计算Python / NLTK中function words的频率。我认为有两种方法可以解决这个问题:

  • 使用词性标注器并总结构成功能词的POS标签
  • 创建功能词列表并执行简单的查找

第一种情况下的问题是,我的数据很嘈杂,我不知道(肯定)哪些POS标签构成功能词。第二种情况下的问题是我没有列表,因为我的数据很吵,所以查找不准确。

我更喜欢第一个到第二个或任何其他会给我带来更准确结果的例子。

2 个答案:

答案 0 :(得分:5)

我刚刚使用了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(自然语言工具包)的标签(在问题上)应该足以表明精明的人。

无论如何,我理解&尊重在这里回复的人的情绪,因为大部分都是免费的,但我认为我们至少可以做的是对问候海报表示一点尊重。正确地指出,当你帮助别人时,会收到帮助,当尊重他人时,同样会受到尊重。

答案 1 :(得分:0)

在尝试之前,您不知道哪种方法有效。我推荐第一种方法;我已经成功地使用了非常嘈杂的数据,其中“句子”中的电子邮件主题标题(短文,不是正确的句子)甚至语言都是未知的(大约85%的英语; Cavnar& Trenkle算法快速崩溃)。 成功被定义为搜索引擎中提高的检索性能;如果您只想计算频率,问题可能会更容易。

确保使用占用上下文的POS标记器(大多数都这样做)。检查你得到的单词和频率列表,可能会删除一些你不考虑功能单词的单词,甚至可以过滤掉那些太长的单词;这将消除误报。

(免责声明:我使用的是Stanford POS标签,而不是NLTK,所以是YMMV。我使用了英语的默认模型之一,我认为,在Penn Treebank上进行了培训。)