gpt4 book ai didi

python - 从字符串列表中查找最常见的单词

转载 作者:行者123 更新时间:2023-12-05 08:45:49 24 4
gpt4 key购买 nike

我们有一个给定的列表:

list_of_versions = ['apple II' ,'apple', 'apple 1' , 'HD APPLE','apple 3.5', 'adventures of apple'  , 'apple III','orange 2' ,'300mhz apple', '300-orange II' , 'orange II HD' , 'orange II tvx', 'orange 2' , 'HD berry-vol 2', 'berry II', 'berry 2', 'berry VI', 'berry 1', 'berry II' ,'berry' ,'II Berry']

如何找到每个字符串的主要单词?例如:

word            | main
--------------------------
apple II |apple
val/apple |apple
apple 1 |apple
HD APPLE |apple
apple 3.5 |apple
adventures of apple |apple
apple III |apple
300mhz apple |apple
orange 2 |orange
300-orange II |orange
orange II HD |orange
/orange/II-tvx |orange
orange 2 |orange
HD berry-vol 2 |berry
berry-II |berry
-berry-2 |berry
(berry) VI |berry
berry 1 |berry
berry II |berry
berry 2022 B8 |berry
II Berry-hd |berry
22 Berry II |berry
Berry 6.8.9 |berry

要点:

  1. 我无法创建包含三个主词(apple、orange、berry)的主词列表。因为列表将更新为新的主要单词。所以我们永远不知道新词是什么。

  2. 版本没有限制。在某些时候,我们可以看到诸如“apple XII”或“GB-HD berry 2.4”之类的内容,因此版本值(value)可以代表一切。 (如果你想创建一个停用词列表)

很高兴拥有(但这不是强制性的)--> 还添加了另一列来显示版本。即:

word            | main   | version
-----------------------------------
apple II |apple | II
val/apple |apple | NULL
apple 1 |apple | 1
HD APPLE |apple | HD
apple 3.5 |apple | 3.5
apple III |apple | III
300mhz apple II |apple | II
orange 2 |orange | 2
300-orange II |orange | II
orange II HD |orange | II HD
/orange/II-tvx |orange | II tvx
orange 2 |orange | 2
HD berry-vol 2 |berry | 2 HD
berry-II |berry | II
-berry-2 |berry | 2
(berry) VI |berry | VI
berry 1 |berry | 1
berry II |berry | II
berry 2022 |berry | NULL
II Berry-hd |berry | II HD
22 Berry |berry | 22
Berry 6.8.9 |berry | 6.8.9

最佳答案

按照评论中的建议,你可以得到最长的字符串:

df['main'] = (df['words']
.str.extractall('([a-zA-Z]+)')
.sort_values(by=0, key=lambda x: x.str.len())
.groupby(level=0).last()
[0].str.lower() # optional
)

输出:

             words    main
0 apple II apple
1 apple apple
2 apple 1 apple
3 HD APPLE apple
4 apple 3.5 apple
5 apple III apple
6 orange 2 orange
7 300mhz apple apple
8 300-orange II orange
9 orange II HD orange
10 orange II tvx orange
11 orange 2 orange
12 HD berry-vol 2 berry
13 berry II berry
14 berry 2 berry
15 berry VI berry
16 berry 1 berry
17 berry II berry
18 berry berry
19 II Berry berry

尝试“版本”:保留所有其他词

选项 1
g = (df['words']
.str.extractall(r'\b([a-zA-Z]+)\b')
.sort_values(by=0, key=lambda x: x.str.len())
.droplevel(1)
.groupby(level=0, group_keys=False)[0]
)

df['main'] = g.last().str.lower()
df['version'] = g.apply(lambda x: ' '.join(x.iloc[:-1]))

输出:

             words    main version
0 apple II apple II
1 apple apple
2 apple 1 apple
3 HD APPLE apple HD
4 apple 3.5 apple
5 apple III apple III
6 orange 2 orange
7 300mhz apple apple
8 300-orange II orange II
9 orange II HD orange HD II
10 orange II tvx orange II tvx
11 orange 2 orange
12 HD berry-vol 2 berry HD vol
13 berry II berry II
14 berry 2 berry
15 berry VI berry VI
16 berry 1 berry
17 berry II berry II
18 berry berry
19 II Berry berry II
选项2(不同的正则表达式和长度计算)
g = (df['words']
.str.extractall(r'(\b\w+\b)')
.sort_values(by=0, key=lambda x: x.str.replace('[^a-zA-Z]', '', regex=True)
.str.len())
.droplevel(1)
.groupby(level=0, group_keys=False)[0]
)

df['main'] = g.last().str.lower()
df['version'] = g.apply(lambda x: ' '.join(x.iloc[:-1]))

输出:

             words    main   version
0 apple II apple II
1 apple apple
2 apple 1 apple 1
3 HD APPLE apple HD
4 apple 3.5 apple 3 5
5 apple III apple III
6 orange 2 orange 2
7 300mhz apple apple 300mhz
8 300-orange II orange 300 II
9 orange II HD orange HD II
10 orange II tvx orange II tvx
11 orange 2 orange 2
12 HD berry-vol 2 berry 2 HD vol
13 berry II berry II
14 berry 2 berry 2
15 berry VI berry VI
16 berry 1 berry 1
17 berry II berry II
18 berry berry
19 II Berry berry II

关于python - 从字符串列表中查找最常见的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71648462/

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