计算虚词频率

2024-09-28 03:25:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我想计算Python/NLTK中function words的频率。我看到了两种方法:

  • 用词性标记法对构成虚词的词性标记进行归纳总结
  • 创建一个虚词列表并执行一个简单的查找

第一种情况下的问题是,我的数据很嘈杂,我不知道(确切地说)哪些POS标记构成了虚词。第二种情况的关键是我没有列表,而且由于我的数据很嘈杂,所以查找不准确。在

我更喜欢第一个例子,而不是第二个例子,或者任何其他能让我得到更准确结果的例子。在


Tags: 数据方法标记pos列表情况function例子
2条回答

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

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

(免责声明:我使用的是斯坦福POS标签,不是NLTK,所以是YMMV。我用了一个默认的英语模式,我想是在宾州大学的Treebank上训练的。)

我刚刚使用了LIWCEnglish2007字典(我为此付费),并从现在起执行了一个简单的查找。任何其他答案都是最受欢迎的。在

我必须说,我对这里几个答案的冲动有点吃惊。因为,有人要密码。我是这样做的:

''' 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(自然语言工具包)的标签(关于问题)应该对精明的人有足够的指示。在

不管怎样,我理解并尊重回复者的情绪,因为大部分内容是免费的,但我认为我们至少可以对问题海报表示一点尊重。正如有人正确地指出的那样,当你帮助别人时,别人也会得到帮助,同样地,当别人尊重你时,别人也会得到尊重。在

相关问题 更多 >

    热门问题