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

问题描述 投票:0回答:1

一个程序,如果它包含单词列表,则逐行检查字符串,并在名为“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并具有编程基础知识。我从字符串中完成了简单的提取。

python-3.x text-mining
1个回答
0
投票

有几种方法可以解决您的问题。这是一个使用正则表达式的解决方案。来自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)。基于分裂的解决方案是最快的,但最不准确。

© www.soinside.com 2019 - 2024. All rights reserved.