我想要一种有效的Pythonic方法来计算文本中的相邻单词对.高效,因为它需要更好地处理更大的数据集.
计数的方式也很重要.
考虑这个简化的例子:
words_list = "apple banana banana apple".split()
我可以创建邻近对使用:
word_pair_list = zip(words_list[:-1], words_list[1:])
然后我可以用Python来计算它们
word_pair_ctr = collections.Counter(word_pair_list)
这给了我
(('apple', 'banana'), 1)
(('banana', 'banana'), 1)
(('banana', 'apple'), 1)
请注意,’apple’和’apple’不是相邻的一对.
但我希望对的顺序不计算在内.这意味着(‘apple’,’banana’)和(‘banana’,’apple’)应该被认为是相同的,并且计数应该是
(('apple', 'banana'), 2)
(('banana', 'banana'), 1)
我找不到这样做的Pythonic方法,不需要我访问单词列表中的每个项目,这对于较大的文本来说效率低下.
我很高兴使用常见的scipy,numpy和pandas作为库.
解决方法:
您可以使用官方文档(https://docs.python.org/3.8/library/itertools.html)中的成对函数的修改版本,以便按对读取列表,同时重新排序每对成员:
l = "apple banana banana apple".split()
def pairwise(iterable):
"""s -> (s0,s1), (s1,s2), (s2, s3), ..."""
a, b = itertools.tee(iterable)
next(b, None)
return ((a, b) if a < b else (b, a) for a, b in zip(a, b))
>>> list(pairwise(l))
<class 'list'>: ['apple', 'banana', 'banana', 'apple']
>>> collections.Counter(pairwise(l))
Counter({('apple', 'banana'): 2, ('banana', 'banana'): 1})
希望这可以帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。