我没有NLP或大量编程方面的背景,但在我正在研究报纸出版的历史时,我已经进步了。我正在用10k +的纯文本页面进行摔跤,因为我难以雕刻成结构化数据来执行更复杂的分析。
我已经能够在一个大文本文件上运行斯坦福NER,以成功标记我想要检查的许多项目。所以这是我天真的问题:如何将标记的文本文件提取或解析为csv文件 - 或者至少将每个类别的单独列表分解为某种结构?
例如,我正在看这样的事情:
The <ORGANIZATION>Committee on Education</ORGANIZATION> and the <ORGANIZATION>Philadelphia Assocation of Teachers</ORGANIZATION> offer a plan for the organization of the school in the town of <LOCATION>Erie</LOCATION>, <LOCATION>Pennsylvania</LOCATION> as it will be run by the honorable <PERSON>Williamson</PERSON> and <PERSON>Thompson</PERSON>
基于查看本网站上其他问题的相似答案,我看过可能使用某种正则表达式甚至是sed,如下所示,但没有成功。
sed -e'/ ^ location /,/ ^ / location / p'nertagged.txt
我考虑过其他选项,比如BeautifulSoup或XML解析器(因为斯坦福NER实现可以输出XML),但是我想知道这是不是有点过分,因为我处理的标签数量非常有限 - 基本上只是人,位置,组织。这些是我最好的选择吗?在我的无知中,我错过了什么?
非常感谢。
答案 0 :(得分:1)
此答案记录了2014年斯坦福NER 3.5版中添加的新功能。outputFormat
有tabbedEntities
。这种格式是定制设计的
对于想要将输出转储到电子表格的人有帮助
然后从那里工作。这是一个有趣的混合文本/专栏
数据表示,我们希望人们觉得有用。整体
标记化文本以文本顺序呈现,以3个制表符分隔
列。第一列中的内容是已识别的实体,第二列中的内容
列给出了它们的类别,第三列包含所有文本
认可实体之间。您应该能够轻松加载此文件
到电子表格,R或数据库,然后进行聚合或查询
被认可的实体。以下是使用上面显示的文字的示例:
$ java -cp stanford-ner.jar edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier classifiers/english.all.3class.distsim.crf.ser.gz -textFile jcc.txt -outputFormat tabbedEntities 2> /dev/null
The
Committee on Education ORGANIZATION and the
Philadelphia Assocation of Teachers ORGANIZATION offer a plan for the organization of the school in the town of
Erie LOCATION ,
Pennsylvania LOCATION as it will be run by the honorable
Williamson PERSON and
Thompson PERSON
答案 1 :(得分:0)
同意。这实际上并不像想要的那样容易,我会添加一个选项,使下一个版本更容易:)。但是,如果你在你的例子中使用-outputFormat inlineXML
,那么下面的Perl一行代码将在输出文件上运行,我称之为inlineXML.out
。
perl -ne 'while (s/<([^>]+)>([^<]*)<[^>]+>//) { print "$2\t$1\n"; }' inlineXML.out
这实际上在列之间放置了一个标签而不是逗号。大多数电子表格都会读得很好。如果您真的想要逗号,可以将上面的\t
替换为,
,但如果某些实体包含逗号(例如University of California , Davis
),则可能会遇到问题。