Поиск слова из строки в python и вывод в столбец CSV - PullRequest
0 голосов
/ 23 марта 2019

Программа, которая построчно проверяет строки, если они содержатся в списке слов, и записывает 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 У меня есть 1 миллион строк в файле CSV с текстовыми сообщениями.

Как создать простой логический вывод в следующем столбце с 0 или 1, в зависимости от того, какое сообщение содержит любое из слов из набора слов.

Я не продвинутый программист, я работаю с Python и обладаю базовыми знаниями в области программирования. Я сделал простое извлечение из строк.

1 Ответ

0 голосов
/ 23 марта 2019

Есть несколько способов решить вашу проблему.Вот решение с регулярными выражениями.Все коды аэропортов из 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) медленнеечем на основе решения.Сплит-решение является самым быстрым, но наименее точным.

...