Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.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 有没有办法统计句子列表中出现的单词对的数量?_Python_Python 3.x_Nlp - Fatal编程技术网

Python 有没有办法统计句子列表中出现的单词对的数量?

Python 有没有办法统计句子列表中出现的单词对的数量?,python,python-3.x,nlp,Python,Python 3.x,Nlp,我有一个词对列表,我必须检查这些词对是否出现在句子列表中的每个句子中。 例如: 单词对列表如下所示: [(mary,little),(mary,lamb),(mary,jack),(mary,jill),(little,lamb),(little,Jack),(little,Jill),(lamb,jack),(lamb,jill),(jack,jill)] 句子列表如下: ['Mary had a little lamb','Jack and Jill went up the hill']

我有一个词对列表,我必须检查这些词对是否出现在句子列表中的每个句子中。 例如: 单词对列表如下所示:

[(mary,little),(mary,lamb),(mary,jack),(mary,jill),(little,lamb),(little,Jack),(little,Jill),(lamb,jack),(lamb,jill),(jack,jill)]
句子列表如下:

['Mary had a little lamb','Jack and Jill went up the hill']
输出应该是这样的:对于每个句子,每个词对的出现次数都被计算在内。在本例中,第一个句子的单词对计数为

[(mary,little):1,(mary,lamb):1,(mary,jack):0,(mary,jill):0,(little,lamb):1,(little,Jack):0,(little,Jill):0,(lamb,jack):0,(lamb,jill):0,(jack,jill):0]

第二句也是这样。输出也可以以表格形式显示,其中句子作为一列,单词对作为其他列。

这些对也需要是字符串:

pairs=[('mary','little'),('mary','lamb'),('mary','jack'),('mary','jill'),('little','lamb'),('lamb','jack'),('lamb','jill'),('jack','jill')]
sents=[“玛丽有一只小羊羔”,“杰克和吉尔上山了”]
您需要使用
.lower()
函数使您选择的句子小写,因为您的单词匹配不区分大小写。然后,您可以使用列表理解创建一个成对的列表,其中两个单词都在句子中

sent=sents[0].lower()
matches=[s表示s成对,如果s[0]表示已发送,s[1]表示已发送]
d={}
对于成对的p:
如果p匹配:
d[p]=1
其他:
d[p]=0
印刷品(d)

如果您是one Liner的粉丝,您可以使用它:

m_str = 'Mary had a little lamb'
m_dict = {pair:count for pair,count in zip(a, [1 if (item[0] in m_str.lower().split(' ') and item[1] in m_str.lower().split(' ')) else 0 for item in a])}
输出:

{('mary', 'little'): 1, ('mary', 'lamb'): 1, ('mary', 'jack'): 0, ('mary', 'jill'): 0, ('little', 'lamb'): 1, ('little', 'Jack'): 0, ('little', 'Jill'): 0, ('lamb', 'jack'): 0, ('lamb', 'jill'): 0, ('jack', 'jill'): 0}

如果相应地出现或不出现,此解决方案将只带来1和0。没有完全理解成对计数器的含义(例如,让我们假设-第一个单词的两倍,第二个单词的一倍-这算多少?)。即使第一个单词出现两次,两个单词中的两个都应该出现在句子中,只有这样它才会起作用。这对于单个句子来说很好。然而,如果我使用for循环遍历所有的句子,那么每次字典更新时。有没有办法将每个句子的字典值存储为列表,其中每个列表将包含每个句子的字典值?