Поиск текста по нескольким фразам python

В настоящее время я пытаюсь выполнить поиск по нескольким pdf-файлам для определенных единиц оборудования. Я понял, как разобрать файл PDF в python вместе со списком оборудования. В настоящее время у меня проблемы с фактической функцией поиска. Лучший способ, который я нашел для этого в Интернете, - это токенизировать текст и поиск по нему с помощью ключевых слов (код ниже), но, к сожалению, некоторые названия оборудования состоят из нескольких слов, в результате чего эти имена превращаются в бессмысленные слова. как «синий» и «испариться», которые встречаются в тексте много раз и тем самым насыщают возвраты. Единственный способ, который я придумал, чтобы справиться с этим, - это искать только уникальные слова в названиях оборудования и удалять более распространенные, но мне было интересно, есть ли более элегантное решение, поскольку даже уникальные слова имеют тенденцию иметь несколько ложных результатов на документ.

В основном я ищу способ поиска в текстовом файле таких фраз, как «Синий передатчик 3», без разбора этой фразы на [«Синий», «Передатчик», «3»]

вот что у меня есть до сих пор

import PyPDF2
import nltk
from nltk import word_tokenize
from nltk.corpus import stopwords
import re

#open up pdf and get text
pdfName = 'example.pdf'
read_pdf = PyPDF2.PdfFileReader(pdfName)
text = ""
for i in range(read_pdf.getNumPages()):
    page = read_pdf.getPage(i)
    text += "Page No - " + str(1+read_pdf.getPageNumber(page)) + "\n"
    page_content = page.extractText()
    text += page_content + "\n"

#tokenize pdf text
tokens = word_tokenize(text)
punctuations = ['(',')',';',':','[',']',',','.']
stop_words = stopwords.words('english')
keywords = [word for word in tokens if not word in stop_words and not word in punctuations]

#take out the endline symbol and join the whole equipment data set into one long string
lines = [line.rstrip('\n') for line in open('equipment.txt')]
totalEquip = " ".join(lines)

tokens = word_tokenize(totalEquip)
trash = ['Black', 'furnace', 'Evaporation', 'Evaporator', '500', 'Chamber', 'A']
searchWords = [word for word in tokens if not word in stop_words and not word in punctuations and not word in trash]

for i in searchWords:
    for word in splitKeys:
        if i.lower() in word.lower():
            print(i)
            print(word + "\n")

Любая помощь или идеи, которые вы могли бы иметь, были бы очень признательны

Только что понял, что это может быть неясно, splitKeys - это набор данных токенов из файла pdf.

PythonWrangler44 14.03.2019 06:06

Каков ваш вклад и каков желаемый результат?

FailSafe 14.03.2019 07:20

@FailSafe Мои входные данные — это файл PDF для поиска и текстовый файл, содержащий список оборудования, оба из которых являются константами в моем коде. Желаемым результатом будет список всего оборудования, упомянутого в pdf-файле.

PythonWrangler44 14.03.2019 07:38

Я имею в виду, дайте нам образец того, как выглядит ваш ввод, и на его основе какой результат вы хотите получить. Вот так: stackoverflow.com/questions/55126197/…

FailSafe 14.03.2019 07:52

моим вводом будет строка текста, например: «это содержимое pdf-файла, содержащего кучу различной информации, например, об оборудовании. Одним из таких устройств является Blue Machine 7, очень импортное оборудование. ." и это также будет список оборудования, разобранный на различные части оборудования, такие как: [Фиолетовый молоток, розовый молоток, Синяя машина 7]. Я хотел бы найти текст для каждой единицы оборудования и вернуть Blue Machine 7, как это было в тексте.

PythonWrangler44 14.03.2019 08:00

Честно говоря, мне нужно немного больше (и вы должны отредактировать свой первоначальный пост, чтобы показать свой вклад и желаемый результат). С тем, что вы только что дали мне, как бы конкретно это ни было, вы можете использовать цикл for для перебора нужных строк, чтобы эффективно выполнять re.findall('(Blue[\s]*Machine[\s]*7)', string), re.findall('(Purple[\s]*hammer)', string) и т. д., и это не похоже на то, что вы хотите, исходя из вашего первоначального поста

FailSafe 14.03.2019 08:18
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
383
0

Другие вопросы по теме