В настоящее время я пытаюсь найти в нескольких файлах PDF определенные элементы оборудования. Я разобрался, как разобрать файл pdf в python вместе со списком оборудования. В настоящее время у меня возникли проблемы с реальной функцией поиска. Наилучший способ сделать это онлайн - это токенизировать текст и выполнять поиск по ключевым словам (код ниже), но, к сожалению, некоторые из названий оборудования состоят из нескольких слов, что приводит к тому, что эти имена токенизируются в бессмысленные слова. как «синий» и «испариться», которые встречаются в тексте много раз и, таким образом, насыщают результаты. Единственный способ решить эту проблему - искать только уникальные слова в названиях оборудования и удалять наиболее распространенные, но мне было интересно, было ли более элегантное решение, поскольку даже уникальные слова имеют тенденцию иметь несколько ложных возвратов на документ.
В основном я ищу способ поиска по текстовому файлу фраз таких слов, как "Blue Transmitter 3", без разбора этой фразы на ["Blue", "Transmitter", "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")
Любая помощь или идеи, которые вы могли бы иметь, очень ценится