我想计算Python / NLTK中function words的频率。我认为有两种方法可以解决这个问题:
第一种情况下的问题是,我的数据很嘈杂,我不知道(肯定)哪些POS标签构成功能词。第二种情况下的问题是我没有列表,因为我的数据很吵,所以查找不准确。
我更喜欢第一个到第二个或任何其他会给我带来更准确结果的例子。
答案 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上进行了培训。)