Как проанализировать заданную c строку текста из PDF в python -3? - PullRequest
0 голосов
/ 27 января 2020

Я работаю над кодом, который идентифицирует именованные объекты (NER) в документах PDF. Мой текущий код работает в три этапа. Во-первых, он превращает PDF в текстовую строку. Во-вторых, это токенизирует текст. В-третьих, он классифицирует текст.

Сейчас этот код классифицирует каждый токен (слово) в текстовой строке. Однако я хочу, чтобы программа классифицировала только определенную часть текста. Часть всегда находится между словами "Body" и "Classification" (для тех, кто знаком с форматом, я анализирую документы LexisNexis). Мне интересно, есть ли способ заставить программу классифицировать текст только между этими двумя словами? Я прочитал несколько статей по этому вопросу, но мне не удалось найти ответ на мой конкретный c вопрос.

У меня такое ощущение, что мне нужно вставить строку, идентифицирующую указанный c строка между "tokenized_text" и "classified_text" строкой, но я не уверен, что. Спасибо за вашу помощь!

#Import Programs for NER
import os
import PyPDF2
import nltk
import pandas

# NER tagger
from nltk.tag import StanfordNERTagger
from nltk.tokenize import word_tokenize

st = StanfordNERTagger('C:\\file_path\\english.all.3class.distsim.crf.ser.gz',
                       'C:\\file_path\\stanford-ner.jar',
                       encoding='utf-8')

destDirectory = file_path

#Tagging NERs
for file in os.listdir(destDirectory):
    pdf_file = open(destDirectory + '\\' + file, 'rb')
    read_pdf = PyPDF2.PdfFileReader(pdf_file)
    number_of_pages = read_pdf.getNumPages()
    text = ''
    for i in range(0,number_of_pages):
        page = read_pdf.getPage(i)
        page_content = page.extractText()
        text = text+page_content
    tokenized_text = word_tokenize(text)
    classified_text = st.tag(tokenized_text)

print(classified_text)

Редактировать:

Вот более простой код для работы. Обратите внимание, что эта программа не запустится, если вы не загрузили тег Stanford (St) и не указали местоположение файла.

#Import Programs for NER
import os
import PyPDF2
import nltk
import pandas

# NER tagger
from nltk.tag import StanfordNERTagger
from nltk.tokenize import word_tokenize

st = StanfordNERTagger('C:\\file_path\\english.all.3class.distsim.crf.ser.gz',
                       'C:\\file_path\\stanford-ner.jar',
                       encoding='utf-8')

destDirectory = file_path

#Tagging NERs
for file in os.listdir(destDirectory):
    # Insert code here for reading in the PDFs
    text = 'Title Example Body This is an example line of text. Classification Language: English'
    tokenized_text = word_tokenize(text)
    classified_text = st.tag(tokenized_text)

print(classified_text)

1 Ответ

0 голосов
/ 27 января 2020

Вы можете использовать регулярное выражение, как показано ниже, чтобы извлечь слово, которое вы хотите пометить:

>>> import re
>>> s ='sample line Body WORD TO EXTRACT Classification'
>>> re.search(r'Body(.*?)Classification', s).group(1)
' WORD TO EXTRACT '

Для нескольких случаев вы можете использовать re.findall

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...