将文本传递到Stanford NER标记器之前应采取哪些预处理步骤?

时间:2018-10-27 01:13:43

标签: python nlp stanford-nlp

最初,我遵循了一些预处理步骤,例如,停止单词删除,HTML剥离,删除标点符号。但是,如果我不这样做,NER的表现似乎会更好。谁能告诉我要遵循哪些预处理步骤?

1 个答案:

答案 0 :(得分:0)

StanfordNER唯一需要的就是干净的文本,我的意思是干净的文本,没有HTML或任何其他类型的文档元标记。另外,您不应该删除停用词,这些停用词可能对模型决定给哪个词赋予标签很有用。

只有一个包含纯文本的文件:

echo "Switzerland, Davos 2018: Soros accuses Trump of wanting a 'mafia state' and blasts social media." > test_file.txt

然后,您将调用stanford-ner.jar并将其传递给经过训练的模型,例如:classifiers/english.all.3class.distsim.crf.ser.gz和输入文件,例如:test_file.txt

赞:

java -cp stanford-ner-2017-06-09/stanford-ner.jar edu.stanford.nlp.ie.crf.CRFClassifier -loadClassifier classifiers/english.all.3class.distsim.crf.ser.gz -textFile test_file.txt -outputFormat inlineXML

这应该输出如下内容:

Switzerland LOCATION
,   O
Davos   PERSON
2018    O
:   O
Soros   PERSON
accuses O
Trump   PERSON
of  O
wanting O
a   O
`   O
mafia   O
state   O
'   O
and O
blasts  O
social  O
media   O
.   O

如您所见,您甚至不需要处理令牌化(例如,在句子中找到每个唯一的令牌/单词),StanfordNER会为您完成。

另一个有用的功能是将StanfordNER设置为Web服务:

java -mx2g -cp stanford-ner-2017-06-09/stanford-ner.jar edu.stanford.nlp.ie.NERServer -loadClassifier my_model.ser.gz -textFile -port 9191 -outputFormat inlineXML

然后,您可以简单地通过telnet或发布句子,然后将其取回来:

telnet 127.0.0.1 9191
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Switzerland, Davos 2018: Soros accuses Trump of wanting a 'mafia state' and blasts social media.

<LOCATION>Switzerland</LOCATION>, <PERSON>Davos</PERSON> 2018: <PERSON>Soros</PERSON> accuses <PERSON>Trump</PERSON> of wanting a 'mafia state' and blasts social media.

Connection closed by foreign host.