''' 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)
在你尝试之前,你不知道哪种方法有效。不过,我推荐第一种方法;我在非常嘈杂的数据中成功地使用了它,其中电子邮件主题标题(短文本,不正确的句子)的“句子”甚至语言都是未知的(大约85%的英语;Cavnar&Trenkle算法很快就崩溃了)。成功被定义为在搜索引擎中提高检索性能;如果您只想计算频率,问题可能会更容易。在
确保你使用的POS标记器考虑到了上下文(大多数情况下)。检查一下你得到的单词和频率列表,也许可以去掉一些你不考虑虚词的单词,甚至过滤掉那些太长的单词;这样可以消除误报。在
(免责声明:我使用的是斯坦福POS标签,不是NLTK,所以是YMMV。我用了一个默认的英语模式,我想是在宾州大学的Treebank上训练的。)
我刚刚使用了LIWCEnglish2007字典(我为此付费),并从现在起执行了一个简单的查找。任何其他答案都是最受欢迎的。在
我必须说,我对这里几个答案的冲动有点吃惊。因为,有人要密码。我是这样做的:
任何用python编写过代码的人都会告诉您,使用特定的POS标记执行查找或提取单词不是火箭科学。另外,NLP(自然语言处理)和NLTK(自然语言工具包)的标签(关于问题)应该对精明的人有足够的指示。在
不管怎样,我理解并尊重回复者的情绪,因为大部分内容是免费的,但我认为我们至少可以对问题海报表示一点尊重。正如有人正确地指出的那样,当你帮助别人时,别人也会得到帮助,同样地,当别人尊重你时,别人也会得到尊重。在
相关问题 更多 >
编程相关推荐