首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从python中的字符串中搜索Word并将输出提供给CSV列

从python中的字符串中搜索Word并将输出提供给CSV列
EN

Stack Overflow用户
提问于 2019-03-23 19:45:26
回答 1查看 70关注 0票数 0

一个程序,它按行检查字符串是否包含在单词列表中,并在下一列“中写入1/0。

我正在寻找过滤文本信息,其中包含“PNR”和“机场代码”(如“LHR”、“JFK”等)。

代码语言:javascript
复制
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,并且有编程的基本知识。我从字符串中做了简单的抽取。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-23 19:53:00

有几种方法可以解决你的问题。这里有一个带有正则表达式的解决方案。来自word的所有机场代码都被连接成一个模式,该模式将任何代码作为单词匹配:

代码语言:javascript
复制
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]

您也可以使用拆分的方法来实现原来的方法,但是如果代码后面紧跟着一个句点,那么您将得到一个假否定。

代码语言:javascript
复制
matches = [1 if word_set & set(s.split()) else 0 for s in String]
#[0, 1, 1]

可以通过从split()切换到nltk.word_tokenize()来修复

代码语言:javascript
复制
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) .基于拆分的解决方案是最快的,但却是最不准确的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55317688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档