我想计算function words的频率在 Python/NLTK 中。我看到有两种方法可以解决这个问题:
- 使用词性标注器并总结构成功能词的词性标签
- 创建虚词列表并执行简单的查找
第一种情况的问题是,我的数据很嘈杂,而且我不知道(确定)哪些词性标签构成功能词。第二种情况的问题是我没有列表,并且由于我的数据很嘈杂,因此查找不会准确。
与第二个相比,我更喜欢第一个或任何其他可以为我提供更准确结果的示例。
最佳答案
我刚刚使用了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(自然语言工具包)的标签(关于问题)对于精明的人来说应该足够了。
无论如何,我理解并尊重在这里回复的人的情绪,因为大部分都是免费的,但我认为我们至少可以做的是对问题发布者表现出一点尊重。正如正确指出的那样,当你帮助别人时,你就会得到帮助,同样,当你尊重别人时,你就会得到尊重。
关于python - 计算功能词的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5819840/