在PDFminer在Python中将PDF转换为TXT时使用Stanford NER时出错?
免责声明:一般来说,我对Python和编程相当陌生。这个问题有几个不同的组成部分——回答其中任何一个或所有问题都会非常有帮助 我正试图用Python编写一个程序,从外援文档中提取位置名称 这些文档通常是PDF文件,所以最初我使用Adobe Reader将它们从PDF转换为TXT。但是我想将这个过程集成到我的程序中,所以我安装了PDFMiner,并一直在测试前一个堆栈溢出问题()中的代码来转换它们。 这是我当前使用的代码:在PDFminer在Python中将PDF转换为TXT时使用Stanford NER时出错?,python,pdf,stanford-nlp,named-entity-recognition,pdfminer,Python,Pdf,Stanford Nlp,Named Entity Recognition,Pdfminer,免责声明:一般来说,我对Python和编程相当陌生。这个问题有几个不同的组成部分——回答其中任何一个或所有问题都会非常有帮助 我正试图用Python编写一个程序,从外援文档中提取位置名称 这些文档通常是PDF文件,所以最初我使用Adobe Reader将它们从PDF转换为TXT。但是我想将这个过程集成到我的程序中,所以我安装了PDFMiner,并一直在测试前一个堆栈溢出问题()中的代码来转换它们。 这是我当前使用的代码: from pdfminer.pdfinterp import PD
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
from cStringIO import StringIO
def convert_pdf_to_txt(path):
rsrcmgr = PDFResourceManager()
retstr = StringIO()
codec = 'utf-8'
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
fp = file(path, 'rb')
interpreter = PDFPageInterpreter(rsrcmgr, device)
password = ""
maxpages = 0
caching = True
pagenos=set()
for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages,
password=password,caching=caching, check_extractable=True):
interpreter.process_page(page)
fp.close()
device.close()
str = retstr.getvalue()
retstr.close()
return str
当我打印输出时,它看起来与Adobe Reader在shell中创建的文本相同,但Stanford-NER标记器找不到任何实体。我使用pyner()来实现stanfordner,它只是为每个句子返回空字典。套接字没有问题,它以前在Adobe转换的文件上工作过。
这是我实现Stanford NER的代码:
import ner
def findloc(text):
tagger = ner.SocketNER(host = 'localhost', port = 8080)
loclist = []
sentence = ""
for char in text:
if char == ".":
sentence += "."
tagsent = tagger.get_entities(sentence)
if u'LOCATION' in tagsent:
loclist.extend(tagsent[u'LOCATION'])
sentence = ""
else:
sentence += char
return [x.encode('ascii').lower() for x in loclist]
在终端中,当代码运行时,此错误被相当频繁地抛出(并且偶尔与Adobe转换的文件一起抛出):
edu.stanford.nlp.process.PTBLexer next
WARNING: Untokenizable: ? (U+F0B7, decimal: 61623)
为什么会发生这种情况?我如何修复它
以下是我一直在使用的示例文档,以供参考:
旁注:正如你所看到的,并不是所有的东西都是句子格式的,所以理想的情况是在将来我的文本挖掘程序也能识别表格之类的东西。但我对这一点还不熟悉,也不知道如何实现它,所以我想先了解一下这个基本的命名实体识别器。然而,如果你有任何建议,我非常乐意接受所有我能得到的帮助
非常感谢