Python 计算虚词的频率

Python 计算虚词的频率,python,nlp,nltk,word-frequency,part-of-speech,Python,Nlp,Nltk,Word Frequency,Part Of Speech,我想计算Python/NLTK中的频率。我认为有两种方法可以做到这一点: 使用词性标记并总结构成虚词的词性标记 创建虚词列表并执行简单的查找 第一种情况的问题是,我的数据很嘈杂,我不知道(肯定)哪些词性标记构成虚词。第二种情况的问题是我没有列表,因为我的数据很嘈杂,所以查找不准确 我更喜欢第一个例子,而不是第二个或任何其他能给我带来更准确结果的例子。在尝试之前,你不知道哪种方法有效。不过,我推荐第一种方法;我已经成功地将其应用于非常嘈杂的数据,其中电子邮件主题标题(短文本,不合适的句子)甚至

我想计算Python/NLTK中的频率。我认为有两种方法可以做到这一点:

  • 使用词性标记并总结构成虚词的词性标记
  • 创建虚词列表并执行简单的查找
第一种情况的问题是,我的数据很嘈杂,我不知道(肯定)哪些词性标记构成虚词。第二种情况的问题是我没有列表,因为我的数据很嘈杂,所以查找不准确


我更喜欢第一个例子,而不是第二个或任何其他能给我带来更准确结果的例子。

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

确保您使用的POS标记器考虑了上下文(大多数情况下是这样的)。检查你得到的单词和频率的列表,也许消除一些你不考虑功能词的单词,甚至过滤掉太长的单词;这将消除误报

(免责声明:我使用的是Stanford POS tagger,而不是NLTK,所以是YMMV。我使用的是英语的默认模式之一,我想是在Penn Treebank上培训过的。)

我只是使用了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(自然语言工具包)的标签(关于这个问题)应该足以说明精明的头脑


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

这里并不清楚你在问什么。如果你问哪种方法更好,你应该说明。然而,你似乎在问一个“让我看看codez”类型的问题。如果你展示你的尝试并解释为什么它不起作用,你可能会得到更好的回应。如果你给出一些代码,你很可能会收到一些返回。你说的“嘈杂”是什么意思?你说的“虚词”是什么意思?如果您从数据中举出一两个句子的例子,并确定虚词,可能会有所帮助。@rmalouf:Noised和function word的定义是上下文敏感的,但只是稍微敏感一些。rmalouf,Noised data是由非正式性质的数据组成的。聊天/短信stlye语言可以构成嘈杂的数据。就虚词而言,它们是没有什么意义的词(我认为NLP标签就足够了)。请检查这里:我知道什么是有噪音的数据和虚词一般-我想知道你的数据有多特别有噪音,你具体指的是什么虚词。听起来你还不完全明白你的意思。。。否则很容易确定要搜索哪些POS标签。Larsmans,谢谢您的回复!我刚刚使用了LIWC English 2007字典(我为此支付了费用),并执行了一个简单的查找。它给了我相当不错的结果。我使用默认的NLTK POS标记器,我想它是一个顺序回退标记器,工作得很好。但是使用词性标记的问题是要确定词性标记对虚词的构成。@Denzil:当然,除了辅助词以外,名词、形容词和动词肯定不是。限定词和代词是虚词;对于副词来说,情况更为复杂。除了情绪分析,标点符号在大多数情况下都是虚词。Larsmans,谢谢。我想在我的例子中,正如我在回答中所说的,查找将是最简单的解决方案。我在Python 3中尝试了代码的第一部分,但得到的错误是“FreqDist”对象没有属性“iteritems”。如何解决这个问题?在Python 3中,
dict.iteritems()
已替换为
dict.items()