Анализатор зависимостей Stanford NLP отображает китайские иероглифы в виде вопросительных знаков.

Я пытаюсь проанализировать китайские данные в формате CoNLL с помощью анализатора зависимостей Стэнфорда edu/stanford/nlp/models/parser/nndep/CTB_CoNLL_params.txt.gz но у меня, похоже, есть некоторые трудности с кодированием.

Мой входной файл находится в utf-8, уже сегментирован на разные слова, предложение выглядит так: 那时 的 坎纳里 鲁夫 , 有着 最 最 最 最 最。。。

Команды, которые я использую для запуска модели:

java -mx2200m -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLP \
    -language Chinese \
    -encoding utf-8 \
    -props StanfordCoreNLP-chinese.properties \
    -annotators tokenize,ssplit,pos,depparse \
    -file ./ChineseCorpus/ChineseTestSegmented.txt \
    -outputFormat conll \

Кажется, все работает нормально, за исключением неправильного кодирования китайских символов, вот что я получаю:

1   ??  _   NT  _   2   DEP
2   ?   _   DEG _   4   NMOD
3   ??? _   NR  _   4   NMOD
4   ??  _   NR  _   6   SUB
5   ?   _   PU  _   6   P
6   ??  _   VE  _   0   ROOT
7   ??? _   NN  _   12  NMOD
8   ??  _   JJ  _   9   DEP
9   ?   _   DEG _   12  NMOD
10  ??? _   NN  _   12  NMOD
11  ??  _   NN  _   12  NMOD
12  ??  _   NN  _   6   OBJ
13  ?   _   PU  _   6   P 

Согласно анализатору Stanford faq, стандартная кодировка для китайского языка - GB18030, но они также говорят: "Тем не менее, синтаксический анализатор может анализировать текст в любой кодировке, если вы передаете правильный параметр кодирования в командной строке", что я и сделал.

Я посмотрел на этот вопрос: как использовать Stanford LexParser для китайского текста? но их решение с помощью iconv не работает для меня, я получаю ошибку cannot convert и я пробовал несколько возможных комбинаций кодировок.

Кто-нибудь предложения о том, что идет не так?

1 ответ

Попробуйте что-то вроде:

java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLP \
-language Chinese -props StanfordCoreNLP-chinese.properties \
-annotators segment,ssplit,pos,parse -file chinese-in.txt -outputFormat conll

Например:

alvas@ubi:~/stanford-corenlp-full-2015-12-09$ cat chinese-in.txt
那时的坎纳里鲁夫,有着西海岸最大的工业化罐头工厂。

alvas@ubi:~/jose-stanford/stanford-corenlp-full-2015-12-09$ \
> java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLP \
> -language Chinese -props StanfordCoreNLP-chinese.properties \
> -annotators segment,ssplit,pos,parse -file chinese-in.txt -outputFormat conll 
[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Registering annotator segment with class edu.stanford.nlp.pipeline.ChineseSegmenterAnnotator
[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator segment
Loading classifier from edu/stanford/nlp/models/segmenter/chinese/ctb.gz ... [main] INFO edu.stanford.nlp.wordseg.ChineseDictionary - Loading Chinese dictionaries from 1 file:

[main] INFO edu.stanford.nlp.wordseg.ChineseDictionary -   edu/stanford/nlp/models/segmenter/chinese/dict-chris6.ser.gz
[main] INFO edu.stanford.nlp.wordseg.ChineseDictionary - Done. Unique words in ChineseDictionary is: 423200.

done [14.4 sec].
[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator ssplit
[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator pos
Reading POS tagger model from edu/stanford/nlp/models/pos-tagger/chinese-distsim/chinese-distsim.tagger ... done [1.4 sec].
[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator parse
[main] INFO edu.stanford.nlp.parser.common.ParserGrammar - Loading parser from serialized file edu/stanford/nlp/models/lexparser/chineseFactored.ser.gz ... 
done [5.2 sec].

Processing file /home/alvas/jose-stanford/stanford-corenlp-full-2015-12-09/chinese-in.txt ... writing to /home/alvas/jose-stanford/stanford-corenlp-full-2015-12-09/chinese-in.txt.conll
Annotating file /home/alvas/jose-stanford/stanford-corenlp-full-2015-12-09/chinese-in.txt
[main] INFO edu.stanford.nlp.wordseg.TagAffixDetector - INFO: TagAffixDetector: useChPos=false | useCTBChar2=true | usePKChar2=false
[main] INFO edu.stanford.nlp.wordseg.TagAffixDetector - INFO: TagAffixDetector: building TagAffixDetector from edu/stanford/nlp/models/segmenter/chinese/dict/character_list and edu/stanford/nlp/models/segmenter/chinese/dict/in.ctb
[main] INFO edu.stanford.nlp.wordseg.CorpusChar - Loading character dictionary file from edu/stanford/nlp/models/segmenter/chinese/dict/character_list
[main] INFO edu.stanford.nlp.wordseg.affDict - Loading affix dictionary from edu/stanford/nlp/models/segmenter/chinese/dict/in.ctb
done.
Annotation pipeline timing information:
ChineseSegmenterAnnotator: 0.2 sec.
WordsToSentencesAnnotator: 0.0 sec.
POSTaggerAnnotator: 0.0 sec.
ParserAnnotator: 0.9 sec.
TOTAL: 1.2 sec. for 13 tokens at 11.0 tokens/sec.
Pipeline setup: 21.1 sec.
Total time for StanfordCoreNLP pipeline: 22.3 sec.

[из]:

http://pastebin.com/raw/Y9J0UBDF

Другие вопросы по тегам