首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >最常出现在字符串之间的词的组合

最常出现在字符串之间的词的组合
EN

Stack Overflow用户
提问于 2022-07-08 22:53:49
回答 1查看 152关注 0票数 1

这里有个问题.

我有一个字符串列表:

代码语言:javascript
运行
复制
strings = ['one two three four', 'one two four five', 'four one two', 'three four']

我试图找出两个或多个字符串中共同出现的单词的组合。

,这是我想要得到的输出.

  • 1,2,4-3倍
  • 3,4-2倍
  • one,2-3倍
  • 2,4-3倍

f 214

这些组合可以是两个或多个单词的任意长度。

,这是我已经看过的--尽管我没有多少运气找到任何我能为我的需要引导的东西:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-08 23:11:26

您可以计算至少两个组合的功率集,并计算这些组合:

代码语言:javascript
运行
复制
from itertools import chain, combinations
from collections import Counter

# https://docs.python.org/3/library/itertools.html
def powerset(iterable, MIN=2):
    "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
    s = list(iterable)
    return chain.from_iterable(combinations(s, r) for r in range(MIN, len(s)+1))

c = Counter(chain.from_iterable(set(powerset(s.split()))
            for s in strings))

# keep counts of 2 or more
out = {k: v for k, v in c.items() if v >= 2}

输出:

代码语言:javascript
运行
复制
{('three', 'four'): 2, 
 ('two', 'four'): 2, 
 ('one', 'two', 'four'): 2, 
 ('one', 'four'): 2, 
 ('one', 'two'): 3}

维持秩序

使用:

代码语言:javascript
运行
复制
c = Counter(chain.from_iterable(tuple(powerset(s.split()))
            for s in strings))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72917714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档