如何在 python 中使用 nltk 找到特定的二元语法?
How can I find a specific bigram using nltk in python?
我目前正在使用 nltk.book iny Python 并希望找到特定二元组的频率。我知道有一个 bigram() 函数可以为您提供文本中最常见的二元语法,如以下代码所示:
>>> list(bigrams(['more', 'is', 'said', 'than', 'done']))
[('more', 'is'), ('is', 'said'), ('said', 'than'), ('than', 'done')]
>>>
但是,如果我只搜索“wish for”之类的特定词怎么办?到目前为止,我在 nltk 文档中找不到任何相关内容。
如果你可以return一个元组列表,你可以使用in
:
>>> bgrms = [('more', 'is'), ('is', 'said'), ('said', 'than'), ('than', 'done')]
>>> ('more', 'is') in bgrms
True
>>> ('wish', 'for') in bgrms
False
然后,如果您要查找特定双字母组的频率,构建一个计数器可能会有所帮助:
from nltk import bigrams
from collections import Counter
bgrms = list(bigrams(['more', 'is', 'said', 'than', 'wish', 'for', 'wish', 'for']))
bgrm_counter = Counter(bgrms)
# Query the Counter collection for a specific frequency:
print(
bgrm_counter.get(tuple(["wish", "for"]))
)
输出:
2
最后,如果您想根据可能的二元组数来理解此频率,可以除以可能的二元组数:
# Divide by the length of `bgrms`
print(
bgrm_counter.get(tuple(["wish", "for"])) / len(bgrms)
)
输出:
0.2857142857142857
我目前正在使用 nltk.book iny Python 并希望找到特定二元组的频率。我知道有一个 bigram() 函数可以为您提供文本中最常见的二元语法,如以下代码所示:
>>> list(bigrams(['more', 'is', 'said', 'than', 'done']))
[('more', 'is'), ('is', 'said'), ('said', 'than'), ('than', 'done')]
>>>
但是,如果我只搜索“wish for”之类的特定词怎么办?到目前为止,我在 nltk 文档中找不到任何相关内容。
如果你可以return一个元组列表,你可以使用in
:
>>> bgrms = [('more', 'is'), ('is', 'said'), ('said', 'than'), ('than', 'done')]
>>> ('more', 'is') in bgrms
True
>>> ('wish', 'for') in bgrms
False
然后,如果您要查找特定双字母组的频率,构建一个计数器可能会有所帮助:
from nltk import bigrams
from collections import Counter
bgrms = list(bigrams(['more', 'is', 'said', 'than', 'wish', 'for', 'wish', 'for']))
bgrm_counter = Counter(bgrms)
# Query the Counter collection for a specific frequency:
print(
bgrm_counter.get(tuple(["wish", "for"]))
)
输出:
2
最后,如果您想根据可能的二元组数来理解此频率,可以除以可能的二元组数:
# Divide by the length of `bgrms`
print(
bgrm_counter.get(tuple(["wish", "for"])) / len(bgrms)
)
输出:
0.2857142857142857