2016-07-02 35 views
0

我使用斯坦福NER 3.6.0來識別人名。我從輸入文本文件或輸入XML文件生成XML沒有問題。Stanford NER,輸出編碼問題

我在閱讀由NER返回的XML文件時遇到問題。

我現在面臨的兩個問題是: 1.名稱不能以''字符開頭,十六進制值爲0xA0。

  1. 意外的XML聲明。 XML聲明必須是文檔中的第一個節點,並且不允許在它之前出現空白字符。

我使用JAR文件和命令提示符來生成XML輸出。

命令行:

的java -mx1000m -cp「d:/Downloads/Projects/Installations/stanford-ner-2015-12-09/stanford-ner.jar; d:/下載/項目/安裝/ stanford-ner-2015-12-09/lib/*「edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier」D:/ Downloads/Projects/Installations/stanford-ner-2015-12-09/classifiers/english.conll.4class.distsim.crf.ser.gz「-outputFormat inlineXML -textFile」C:\ Users \ Freeware Sys \ AppData \ Local \ Temp \ References(2)_in.txt「>」C:\ Users \ Freeware Sys \ AppData \ Local \ Temp \ References(2)_ner.xml「-inputEncoding」UTF-8「-outputEncoding」UTF-8「

任何幫助將不勝感激。

謝謝。

回答

1

我想我們一直在用「inlineXML」來誇大/誤導。實際上,這僅僅意味着斯坦福大學NER在實體周圍輸出XML風格的標籤。它從來不意味着它會生成一個有效的XML文檔作爲輸出。我們可以改變這種情況,但是我們可能會產生不同的結果,因爲對於真正的XML解析,每種實體類型都有不同的標記是沒有意義的。

如果你想真正的XML,嘗試CoreNLP的XML輸出,這是真正的XML:

java -mx1g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators "tokenize,ssplit,pos,lemma,ner", -ner.model edu/stanford/nlp/models/ner/english.conll.4class.distsim.crf.ser.gz -ner.useSUTime false -outputFormat xml -file foo.txt -encoding "UTF-8"

爲什麼不打破空間字符的問題?在罕見的情況下(如電話號碼),他們被故意用於斯坦福NLP代碼,在單個令牌內部允許空格。它們在以UTF-8編碼的XML文檔中有效。

+0

謝謝你的回答,克里斯。 NER生成的XML在通過C#中的XML DOM讀取時引發異常。 我現在面臨的兩個問題是: 1.名稱不能以''字符開頭,十六進制值爲0xA0。 意外的XML聲明。 XML聲明必須是文檔中的第一個節點,並且不允許在它之前出現空白字符。 – Mohankumar