Python:创建一个新变量,该变量派生自从文本中提取句子

Python:创建一个新变量,该变量派生自从文本中提取句子,python,nlp,Python,Nlp,我有一个数据框架,其中一个变量是一个相当长的段落,包含许多句子。有时句子之间用句号分隔,有时用逗号分隔。我试图创建一个新的变量,通过使用选定的单词只提取文本的选定部分。请看下面的数据框的一个简短示例,我目前的结果,后面是我正在使用的代码。注意-第一个变量中的文本非常大 PhysicalMentalDemands Physical_driving Physical_telephones [driving may be necessary [drivin

我有一个数据框架,其中一个变量是一个相当长的段落,包含许多句子。有时句子之间用句号分隔,有时用逗号分隔。我试图创建一个新的变量,通过使用选定的单词只提取文本的选定部分。请看下面的数据框的一个简短示例,我目前的结果,后面是我正在使用的代码。注意-第一个变量中的文本非常大

PhysicalMentalDemands           Physical_driving       Physical_telephones

[driving may be necessary       [driving......]        [telephones...]
occasionally. 
as well as telephones will also 
be occasional to frequent.]  
使用的代码:

searched_words = ['driving' , 'telephones']

for i in searched_words:
  Test ['Physical' +"_"+  str(i)] = Test ['PhysicalMentalDemands'].apply(lambda text: [sent for sent in sent_tokenize(text)
                       if any(True for w in word_tokenize(sent) 
                                 if w.lower() in searched_words)])
问题:

searched_words = ['driving' , 'telephones']

for i in searched_words:
  Test ['Physical' +"_"+  str(i)] = Test ['PhysicalMentalDemands'].apply(lambda text: [sent for sent in sent_tokenize(text)
                       if any(True for w in word_tokenize(sent) 
                                 if w.lower() in searched_words)])
目前,我的代码提取句子,但同时使用这两个词进行提取。我似乎有其他类似的帖子,但没有一篇能够解决我的问题

固定的

搜索词=[“驾驶”、“身体”]

for i in searched_words:
df['Physical' + '_' + i] = result['PhysicalMentalDemands'].str.lower().apply(lambda text: [sent for sent in sent_tokenize(text) 
                                                           if i in word_tokenize(sent)])

如果你想为每个搜索的单词列出单独的列表,你可以考虑把你的代码重新组织成这样的东西:

searched_words = ['driving', 'telephones']

for searched_word in searched_words:
    Test ['Physical' +"_"+  searched_word)] = Test ['PhysicalMentalDemands'].apply(lambda text: [sent for sent in sent_tokenize(text)
                if any(w for w in word_tokenize(sent) if w.lower() == searched_word)])

请注意,修复的核心是将搜索词中的w.lower()改为
如果w.lower()==搜索词

在“问题”部分,您说“使用两个词提取”,这是否意味着它仅在两个词都存在时匹配?“你是在试图匹配两个变量中的任何一个吗?”亨利·伍迪,发生的事情是两个句子都指向两个变量。我的函数不是将一个变量中的驾驶和另一个变量中的电话分开。它不起作用,返回为空。我可能在想any before()@Ian_De_Oliveira我注意到一个小问题,我在那里留下了对
I
的引用,但听起来这不是你的问题。我只是在我的电脑上运行了这个,它似乎工作得很好。我能想到的唯一一件事可能会导致这个问题,就是把
搜索的单词
放在
搜索的单词
应该放在哪里。我还用for I in searched words then==I实现了你的答案,效果很好。等号很简洁,我肯定会用到。tks