Python 3.x 如何找到匹配单词序列的句子从句?python

Python 3.x 如何找到匹配单词序列的句子从句?python,python-3.x,dataframe,Python 3.x,Dataframe,我有大量的句子,我想从中提取与某些单词组合相匹配的子句/片段。我有下面的代码可以工作,但它只适用于一个单词的一个字符串。我找不到一种方法来扩展它以处理多个字符串和两个单词的字符串。我认为这很简单,在我之前有人问过我,但我找不到答案。有人能帮我吗 这是我的代码: import pandas as pd df = pd.read_csv('text.csv') identifiers = ('what') sentence = df['A'] for i in sentence: i =

我有大量的句子,我想从中提取与某些单词组合相匹配的子句/片段。我有下面的代码可以工作,但它只适用于一个单词的一个字符串。我找不到一种方法来扩展它以处理多个字符串和两个单词的字符串。我认为这很简单,在我之前有人问过我,但我找不到答案。有人能帮我吗

这是我的代码:

import pandas as pd

df = pd.read_csv('text.csv')
identifiers = ('what')
sentence = df['A']

for i in sentence:
    i = i.split()
    if identifiers in i:
        index = i.index(identifiers)
        print(i[index:])
给出这样一句话:

"Given that I want to become an entrepreneur, I am wondering what collage to attend."
以及两个单词标识符的列表,如下所示:

identifiers = [('I am', 'I can' ..., 'I will')] # There could be dozens
我怎样才能达到这样的结果

I am wondering what collage to attend.

我尝试过:扩展上面的代码,使用
isin()
和类似
的东西(如果有的话([x in I代表x in标识符])
,但没有解决方案。有什么建议吗?

它不适用于多个单词短语,因为您使用了
split
。由于它在空间上拆分(默认情况下),逻辑上不会有任何单个元素包含空间

您可以立即使用中的
来测试某个字符串是否包含任何其他内容:

>>> sentence = "Given that I want to become an entrepreneur, I am wondering what collage to attend."
>>> identifiers = ['I am', 'I can', 'I will']
>>> for i in identifiers:
...    if i in sentence:
...      print (sentence[sentence.index(i):])
... 
I am wondering what collage to attend.
对于这些字符串,您的尝试
any([x在句子中表示x在标识符中])
,显示

[True, False, False]
虽然它给出了一些有用的结果,但仍然不是索引,它需要在这个结果上进行另一个循环来实际打印索引。(除非您明确且只想知道某个句子是否包含此类短语,否则不需要
任何
部分。)

但是
[x在句子中..]
列表理解只会产生一个
的列表,你不能用它做任何事情,因此它是一条死胡同

但它提出了另一种选择:

>>> [sentence.index(x) for x in identifiers if x in sentence]
[45]
这就引出了一系列结果:

>>> [sentence[sentence.index(x):] for x in identifiers if x in sentence]
['I am wondering what collage to attend.']
如果将
'I want'
添加到标识符列表中,仍然会得到一个正确的结果,现在由两个句子片段组成(都是从最后一段):

(为了好玩,我正在做这件事:如果你想去掉第一个逗号的多余部分,请添加一个与除逗号之外的所有内容都匹配的regexp:


不要介意正则表达式末尾的
groups(0)[0]
部分,它只是将SRE_Match对象强制转换回常规字符串。)

非常感谢您令人印象深刻的回答!当我尝试你的代码时,用一句话就可以了。但我在我的dataframe语句中尝试的是,它没有。有什么原因吗?@twhale:你得到的
句子
是一个普通字符串吗?我对熊猫不太熟悉,你的问题中也没有任何例子。(请注意,它似乎无论如何都不需要。)您需要了解如何将数据集一次输入一个字符串到我的代码中。我不太确定。CVS有时会更改数据结构。我假设它由一列组成,每个单元格中都有字符串。但也有可能每个字符串都包含在一个列表中,因此列的每个单元格都包含一个包含字符串的列表。我得弄清楚。
['I am wondering what collage to attend.', 'I want to become an entrepreneur, I am wondering what collage to attend.']
>>> [re.match(r'^([^,]+)', sentence[sentence.index(x):]).groups(0)[0] for x in identifiers if x in sentence]
['I am wondering what collage to attend.', 'I want to become an entrepreneur']