从文本语料库Python中提取给定单词的并置词

2024-10-02 12:38:37 发布

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

我试图找出如何从文本中提取特定单词的搭配词。例如:在整个文本语料库中,哪些词语与“霍比特人”具有统计学意义的搭配?我的词组(或者我的单词)的结果可能是并置的。在

我知道如何使用nltk生成bi-or-trig,也知道如何只选择包含我感兴趣单词的bi-or-trigrams。我使用以下代码(改编自this StackOverflow question)。在

import nltk
from nltk.collocations import *
corpus  = nltk.Text(text) # "text" is a list of tokens
trigram_measures = nltk.collocations.TrigramAssocMeasures()
tri_finder = TrigramCollocationFinder.from_words(corpus)
# Only trigrams that appear 3+ times
tri_finder.apply_freq_filter(3)
# Only the ones containing my word
my_filter = lambda *w: 'Hobbit' not in w
tri_finder.apply_ngram_filter(my_filter)

print tri_finder.nbest(trigram_measures.likelihood_ratio, 20)

这很好,给了我一个三元组的列表(其中一个元素是我的单词),每个都有它们的对数似然值。但我不想只从一系列的三角图中选择单词。我想在我选择的窗口中进行所有可能的N-Gram组合(例如,在我的单词左3右3的窗口中的所有单词-这意味着一个7-Gram),然后检查这些N-Gram单词中哪些与我感兴趣的单词具有统计相关的频率。我想取对数似然值。在

我的想法是:

1)计算包含我的单词的不同大小的所有N-Gram组合(不一定要使用nltk,除非它允许计算大于三元组的单位,但是我没有找到这个选项)

2)计算构成我的N个单词的对数似然值,并以某种方式与它们出现在(?)中的N个单词的频率进行比较。这是我迷路的地方。。。我没有这方面的经验,我不知道如何思考这一步。在

有人对我该怎么做有什么建议吗? 假设我现在使用nltk提供的三角图库:有人知道如何从那里得到一个与我搜索词最相关的单词的列表吗?在

谢谢你


Tags: orfrom文本importfindermy对数filter
1条回答
网友
1楼 · 发布于 2024-10-02 12:38:37

有趣的问题。。。在

与1)看一下这个thread不同的好的解决方案来制作ngrams。。基本上我看

from nltk import ngrams
sentence = 'this is a foo bar sentences and i want to ngramize it'
n = 6
sixgrams = ngrams(sentence.split(), n)
for grams in sixgrams:
    print (grams)

另一种方法是:

^{pr2}$

min_count控制语料库中每个单词的频率。在

与2)计算两个以上变量的对数似然性有点棘手,因为你应该计算所有的排列。看看这个thesis哪个家伙提出了一个解决方案(第26页有一个很好的解释)。在

然而,除了对数似然函数外,还有一个PMI(Pointwise interactive Information)度量,它计算一对单词的共现次数除以它们在文本中的各自频率。PMI很容易理解和计算,您可以将它用于每对单词。在

相关问题 更多 >

    热门问题