一个程序,如果它包含单词列表,则逐行检查字符串,并在名为“Result”的下一列中写入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")
检查此链接以获取摘要https://imgur.com/0JESYAy.jpg我在包含文本消息的CSV文件中有100万行。
如何在0或1的下一列中生成一个简单的布尔输出,具体取决于消息包含单词集中的任何单词。
我不是高级程序员,我正在使用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的解决方案比基于重新解决方案的解决方案慢很多(x50)。基于分裂的解决方案是最快的,但最不准确。