如何将斯坦福NER标记的文本提取到csv中?

时间:2014-08-29 16:13:14

标签: stanford-nlp

我没有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),但是我想知道这是不是有点过分,因为我处理的标签数量非常有限 - 基本上只是人,位置,组织。这些是我最好的选择吗?在我的无知中,我错过了什么?

非常感谢。

2 个答案:

答案 0 :(得分:1)

此答案记录了2014年斯坦福NER 3.5版中添加的新功能。outputFormattabbedEntities。这种格式是定制设计的 对于想要将输出转储到电子表格的人有帮助 然后从那里工作。这是一个有趣的混合文本/专栏 数据表示,我们希望人们觉得有用。整体 标记化文本以文本顺序呈现,以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),则可能会遇到问题。