Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用nltk跨句子列表计算nGrams_Python_List_Nltk_N Gram - Fatal编程技术网

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}