Python 使用nltk跨句子列表计算nGrams
我有一个列表,其中每个内部列表都是一个标记为单词的句子:Python 使用nltk跨句子列表计算nGrams,python,list,nltk,n-gram,Python,List,Nltk,N Gram,我有一个列表,其中每个内部列表都是一个标记为单词的句子: sentences = [['farmer', 'plants', 'grain'], ['fisher', 'catches', tuna'], ['police', 'officer', 'fights', 'crime']] 目前,我正在尝试计算nGrams,如下所示: numSentences = len(sentences) nGrams = [] for i in ra
sentences = [['farmer', 'plants', 'grain'],
['fisher', 'catches', tuna'],
['police', 'officer', 'fights', 'crime']]
目前,我正在尝试计算nGrams,如下所示:
numSentences = len(sentences)
nGrams = []
for i in range(0, numSentences):
nGrams.append(list(ngrams(sentences, 2)))
这将导致在整个列表中找到双格图,而不是每个内部列表中的单个单词(并且它会重复一些可以预测的句子数量):
如何计算每个句子的语法图(按单词)?换句话说,如何确保NGRAM不跨越多个列表项?这是我想要的输出:
farmer plants
plants grain
fisher catches
catches tuna
police officer
officer fights
fights crime
使用和:
获取以下信息:
使用和:
获取以下信息:
取每个句子的语法图,把结果汇总在一起。你可能想数一数,而不是把它们放在一个大的集合里。以
句子开始
作为单词列表:
counts = collections.Counter() # or nltk.FreqDist()
for sent in sentences:
counts.update(nltk.ngrams(sent, 2))
或者,如果您更喜欢单个字符串而不是元组,请选择您的键:
for sent in sentences:
count.update(" ".join(n) for n in nltk.ngrams(sent, 2))
这就是一切。然后你可以看到最常见的,等等
print(counts.most_common(10))
另外,如果你真的想堆积这些大人物,你会这样做。(你的代码是由句子而不是单词组成的“bigram”,因为你忽略了写句子[i]
),但是跳过这一步,直接数一数
all_ngrams = []
for sent in sentences:
all_ngrams.extend(nltk.ngrams(sent, 2))
取每个句子的语法图,把结果汇总在一起。你可能想数一数,而不是把它们放在一个大的集合里。以
句子开始
作为单词列表:
counts = collections.Counter() # or nltk.FreqDist()
for sent in sentences:
counts.update(nltk.ngrams(sent, 2))
或者,如果您更喜欢单个字符串而不是元组,请选择您的键:
for sent in sentences:
count.update(" ".join(n) for n in nltk.ngrams(sent, 2))
这就是一切。然后你可以看到最常见的,等等
print(counts.most_common(10))
另外,如果你真的想堆积这些大人物,你会这样做。(你的代码是由句子而不是单词组成的“bigram”,因为你忽略了写句子[i]
),但是跳过这一步,直接数一数
all_ngrams = []
for sent in sentences:
all_ngrams.extend(nltk.ngrams(sent, 2))
你也可以考虑使用SCIKIT学习的<代码>计数向量< /COD>作为备选方案。
from sklearn.feature_extraction.text import CountVectorizer
sents = list(map(lambda x: ' '.join(x), sentences)) # input is a list of sentences so I map join first
count_vect = CountVectorizer(ngram_range=(2,2)) # bigram
count_vect.fit(sents)
count_vect.vocabulary_
这将为您提供:
{'catches tuna': 0,
'farmer plants': 1,
'fights crime': 2,
'fisher catches': 3,
'officer fights': 4,
'plants grain': 5,
'police officer': 6}
你也可以考虑使用SCIKIT学习的<代码>计数向量< /COD>作为备选方案。
from sklearn.feature_extraction.text import CountVectorizer
sents = list(map(lambda x: ' '.join(x), sentences)) # input is a list of sentences so I map join first
count_vect = CountVectorizer(ngram_range=(2,2)) # bigram
count_vect.fit(sents)
count_vect.vocabulary_
这将为您提供:
{'catches tuna': 0,
'farmer plants': 1,
'fights crime': 2,
'fisher catches': 3,
'officer fights': 4,
'plants grain': 5,
'police officer': 6}