从 python 中的字符串搜索单词并将输出提供到 CSV 列

Word search from string in python and providing output into CSV column

一个程序,它按行检查字符串是否包含单词列表中的字符串,并在名为 "Result"[=13= 的下一列中写入 1/0 ]

我正在寻找过滤包含 'PNR' 和机场代码(如 'LHR'、'JFK' 等)字词的短信

word=['JFK','LHR','DXB']

String=['London airport is LGW','Dubai airport is DXB','My flight is from JFK']

if set(word).intersection(string.split()):
    print("Found One")

检查此 link 以获取摘要 https://imgur.com/0JESYAy.jpg 我在包含短信的 CSV 文件中有 100 万行。

我如何在下一列中生成一个简单的布尔值输出,输出为 0 或 1,具体取决于消息是否包含 Set of words 中的任何单词。

我不是高级程序员,我正在 python 工作并且具有编程的基础知识。 我已经从字符串中完成了简单的提取。

有几种方法可以解决您的问题。这是一个使用正则表达式的解决方案。 word 中的所有机场代码都连接成一个模式,该模式与任何代码匹配为单词:

import re
pattern = '\b(' + '|'.join(word) + ')\b'
#'\b(JFK|LHR|DXB)\b'
matches = [1 if re.search(pattern, s) else 0 for s in String]
#[0, 1, 1]

您也可以通过拆分工作使您的原始方法生效,但如果代码后紧跟一个句点,那么您将得到假阴性。

matches = [1 if word_set & set(s.split()) else 0 for s in String]
#[0, 1, 1]

这可以通过从 split() 切换到 nltk.word_tokenize() 来解决:

from nltk import word_tokenize as tokens
word_set = set(word)
matches = [1 if word_set & set(tokens(s)) else 0 for s in String]
#[0, 1, 1]

基于 NLTK 的解决方案比基于 re 的解决方案慢 (x50)。基于拆分的解决方案最快,但最不准确。