Единственное, что нужно 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 в качестве веб-службы:
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 или POST-предложение и получить его обратно с тегами:
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.