一个程序,它按行检查字符串是否包含在单词列表中,并在下一列“”中写入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,并且有编程的基本知识。我从字符串中做了简单的抽取。
发布于 2019-03-23 19:53:00
有几种方法可以解决你的问题。这里有一个带有正则表达式的解决方案。来自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) .基于拆分的解决方案是最快的,但却是最不准确的。
https://stackoverflow.com/questions/55317688
复制相似问题