问题描述
我是python初学者(Python 3.8.8 mac),遇到pdf转文本过程中字母丢失的问题。
- 我的问题:
我尝试从 pdf 中提取文本并标记文本中的单词。但是,有些词缺少结尾字母,例如'currenc'、'innov'、'sourc'(在原始文档中,它们是“货币”、“创新”和“来源”
-
我的尝试: 我尝试了 pdftotext、pdfminer、pdfminer3 和 textract(使用语言规范 method='tesseract'),但是没有提供准确的单词列表(代码如下)。该问题并非特定于某些文档,而是针对所有文档文本提取.
-
结果示例
'achain',“区块链”, '白纸', '建造', '无边无际', '表','内容', '抽象的', '背景', '犯罪', '历史','网络', '发展', '需要', “区块链”, '话题', '未解决','问题', '需要', 'achain','原则','稳定','安全','可扩展', '轻松','采用', '实施', '聪明的', '合同', 'lv','共识', '协议', '帐户', '叉', '网络', '价值','交换','协议', '事件', '驱动','应用','供应','链', '财务','真实','发展', '计划', '计划', '程序', '治理', 'achain','基础','治理', '接触', '我们', '打开', '来源','技术', '团队', '抽象',
- 代码
#template of extract text from pdf
from pdfminer3.layout import LAParams,LTTextBox
from pdfminer3.pdfpage import PDFPage
from pdfminer3.pdfinterp import PDFResourceManager
from pdfminer3.pdfinterp import PDFPageInterpreter
from pdfminer3.converter import PDFPageAggregator
from pdfminer3.converter import TextConverter
import io
resource_manager = PDFResourceManager()
fake_file_handle = io.StringIO()
converter = TextConverter(resource_manager,fake_file_handle)
page_interpreter = PDFPageInterpreter(resource_manager,converter)
def pdf_to_text(filepath):
print('Getting text content for {}...'.format(filepath))
process = subprocess.Popen(['pdf2txt.py',filepath],stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
stdout,stderr = process.communicate()
if process.returncode != 0 or stderr:
raise OSError('Executing the command for {} caused an error:\nCode: {}\nOutput: {}\nError: {}'.format(filepath,process.returncode,stdout,stderr))
return stdout.decode('utf-8')
#transform all pdf to csvs
if __name__ == "__main__":
csv_files = list() # a list of dataframes
for file in pdf:
csv_file = pdf_to_text(file)
csv_files.append(csv_file)
#combine all documents(csvs) into one list
documents = []
for i in range(len(csv_files)):
documents.append(csv_files[i])
# prepare the stopping words from nltk
nltk.download('stopwords')
stop = stopwords.words('english')
def mypreprocess(text,n,opt=1):
# text: document n: word with length <= n will be ignored opt: which stemer to use
text = text.lower()
# remove all the irrelevant numbers and punctuation
text = re.sub(r'[^a-z]+',' ',text)
# tokenize the words
token = word_tokenize(text)
# remove the meaningless stopping words
token = [t for t in token if t not in stop]
# stemming transformation
if opt == 1:
token = [porter.stem(t) for t in token]
else:
token = [lancaster.stem(t) for t in token]
token = [x for x in token if len(x) > n]
return token
tokens = []
for i in range(len(documents)):
token = mypreprocess(documents[i],1) # remove irelavant words and stop words,and stem
tokens.append(token)
documents[i] = ' '.join(token)
tokens[:50]
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)