Как найти строки (в большом списке строк) в тексте в Python? - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь выяснить, какие имена в списке в тексте новостей.

У меня большой текстовый файл (около 100 МБ) со многими географическими названиями. Каждое имя представляет собой строку в файле.

Часть файла.

Brasiel
Brasier Gap
Brasier Tank
Brasiilia
Brasil
Brasil Colonial

, а тексты новостей выглядят так:

"It's thought the couple may have contracted the Covid-19 virus in the US or while travelling to Australia, according to Queensland Health officials.
Hanks is not the only celebrity to have tested positive for the virus. British actor Idris Elba also revealed last week he had tested positive."

Например, в этот текст строки Австралии и Квинсленда должны быть основаны. Я использую библиотеку NLTK и создаю ngrams из новостей.

Чтобы сделать это, я делаю это:

from nltk.util import ngrams

# readings the place name file
file = open("top-ord.txt", "r")
values = file.readlines()

news = "It's thought the couple may have contracted the Covid-19 virus in the US or while travelling to Australia, according to Queensland Health officials."

# ngrams_list is all ngrams from the news
for item in ngrams_list:
    if item in values:
        print(item)

Это слишком медленно. Как я могу улучшить это?

1 Ответ

1 голос
/ 28 марта 2020

Преобразование значений в набор следующим образом:

value_set = {country for country in values}

Это должно значительно ускорить процесс поиска при использовании наборов в постоянном времени (в отличие от линейного времени, как со списками)

Кроме того, убедитесь, что вы удаляете завершающие символы новой строки при разборе файла (при необходимости).

...