如何根据单词列表对字符串的单词进行分组?

时间:2019-08-02 08:39:36

标签: python python-3.x string list grouping

我有一个单词列表和一个字符串,并且如果列表中的相同单词都在字符串中并且该字符串的下一个单词也存在于字符串中,我想创建一个新列表,它将附加它们存储为列表中的新元素。

keyword_list = ['individual', 'fixed', 'treatments', 'deposit', 'health',
                'millions', 'panic', 'decision', 'policy', 'insurance', 'account']

string1 = 'i want to buy individual insurance policy and you can get upto 2 millions for the cover do not panic i also want to open fixed deposit account'

new_list = ['individual insurance policy',
            'millions', 'panic', 'fixed deposit account']

2 个答案:

答案 0 :(得分:2)

您可以根据元素在keyword_list中的存在对其进行分组,并与" "一起加入分组。

>>> data = 'i want to buy individual insurance policy and you can get upto 2 millions for the cover do not panic i also want to open fixed deposit account'
>>> keyword_list = ['individual', 'fixed', 'treatments', 'deposit', 'health',
...                 'millions', 'panic', 'decision', 'policy', 'insurance', 'account']

现在,让我们将keyword_list转换为集合,以便查找更快。

>>> keys = set(keyword_list)

现在,让我们根据data中的单词来对keys中的单词进行分组,就像这样

>>> from itertools import groupby
>>> [" ".join(grp) for res, grp in groupby(data.split(), keys.__contains__) if res]
['individual insurance policy', 'millions', 'panic', 'fixed deposit account']

对于传递给groupby的集合中的每个元素,在我们的示例中为data.split(),将调用keys.__contains__函数。然后基于该函数调用的结果,将形成组。由于我们仅对keys中存在的项目感兴趣,因此在列表推导中使用if res进行过滤。

答案 1 :(得分:0)

''' 这是我想出的答案,我们可以改进吗?我没有找到合适的答案 '''

speech =“即使您年轻健康,谁也应该购买个人健康保险,这是明智的决定,因为拥有个人健康保险是一个明智的决定。”

关键字= ['个人','健康','保险','存款','固定','帐户','政策','年轻']

new_key = []

speech_list = speech.split()

对于我在范围内(len(speech_list)-1):

if speech_list[i] in keyword:

    word = speech_list[i]

    for x in range(i+1,len(speech_list)-1):

        if speech_list[x] in keyword:

            word+=" "+speech_list[x]

        else:

            break;

    new_key.append(word)

打印(新键)

'''CODE_OUTPUT-[“个人健康保险政策”,“健康保险政策”,“保险政策”,“政策”,“年轻”,“个人健康保险”,“健康保险”,“保险”] '''

'''EXPECTED_OUTPUT-['个人健康保险单','年轻','个人健康保险']'