gpt4 book ai didi

python - Pandas:加速许多字符串搜索

转载 作者:行者123 更新时间:2023-12-04 10:11:09 24 4
gpt4 key购买 nike

我有一个系列,其中每个元素都是一个空列表:

matches = pd.Series([[]]*4)

和另一串字符串:
strs = pd.Series(["word3, xx word1 word1", "yy", "word2. o", "awldkj"])

我要填充 cats不区分大小写的关键字匹配来自一组关键字:
terms = ["word1", "Word2", "worD3"]

目前,我分别遍历每个搜索词
    for tcat in tcats:
tcat_re = rf'\b{tcat}\b'
has_cat = strs.str.contains(tcat_re, case=False)
print(has_cat.sum(), "matches for", tcat)
w_cats = has_cat.map({True: [tcat], False: []})
cats = cats.combine(w_cats, lambda li, li2: li + li2)

这产生了正确的解决方案:
1 matches for word1
1 matches for Word2
1 matches for worD3

In [507]: matches
Out[509]:
0 [word1, worD3]
1 []
2 [Word2]
3 []

需要注意的两个方面:
  • matches中匹配词的顺序没关系
  • word1strs.iloc[0] 中出现两次但只产生 1 场比赛。如果生成 2 个匹配项就可以了,因为列表可以映射到一个集合然后返回到列表

  • 但是太慢了,因为我的真话 terms列表和 strs系列要大得多。有什么办法可以加快速度?

    最佳答案

    你可以试试:

    strs.str.findall('(?i){}'.format('|'.join([rf'\b{i}\b' for i in terms]))).map(set)

    0 {word1, word3}
    1 {}
    2 {word2}
    3 {}

    或者为了保持秩序:
    (strs.str.findall('(?i){}'.format('|'.join([rf'\b{i}\b' for i in terms])))
    .map(lambda x: [*dict.fromkeys(x).keys()]))

    0 [word3, word1]
    1 []
    2 [word2]
    3 []

    关于python - Pandas:加速许多字符串搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61326869/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com