从 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)。基于拆分的解决方案最快,但最不准确。
一个程序,它按行检查字符串是否包含单词列表中的字符串,并在名为 "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)。基于拆分的解决方案最快,但最不准确。