Как использовать Stanford LexParser для китайского текста?
Я не могу получить правильную кодировку ввода для LexParser от Stanford NLP.
Как использовать Stanford LexParser для китайского текста?
Я сделал следующее, чтобы загрузить инструмент:
$ wget http://nlp.stanford.edu/software/stanford-parser-full-2015-04-20.zip
$ unzip stanford-parser-full-2015-04-20.zip
$ cd stanford-parser-full-2015-04-20/
И мой входной текст находится в UTF-8
:
$ echo "应有尽有 的 丰富 选择 定 将 为 您 的 旅程 增添 无数 的 赏心 乐事 。" > input.txt
$ echo "应有尽有#VV 的#DEC 丰富#JJ 选择#NN 定#VV 将#AD 为#P 您#PN 的#DEG 旅程#NN 增添#VV 无数#CD 的#DEG 赏心#NN 乐事#NN 。#PUNCT" > pos-input.txt
Согласно README.txt
парсер обучался на:
Китайский Есть китайские грамматики, обученные только на материковом материале из Синьхуа и более смешанном материале из НДЦ Chinese Treebank. Входная кодировка по умолчанию - GB18030.
Итак, я попробовал с UTF-8
файл первым:
$ bash lexparser-lang.sh Chinese 80 edu/stanford/nlp/models/lexparser/chinesePCFG.ser.gz parsed input.txt
Loading parser from serialized file edu/stanford/nlp/models/lexparser/chinesePCFG.ser.gz ... done [1.0 sec].
Parsing file: input.txt
Parsing [sent. 1 len. 16]: 应有尽有 的1�7 丰富 选择 宄1�7 射1�7 丄1�7 悄1�7 的1�7 旅程 增添 无数 的1�7 赏心 乐事 〄1�7
Parsed file: input.txt [1 sentences].
Parsed 16 words in 1 sentences (21.00 wds/sec; 1.31 sents/sec).
Это не похоже на работу. Парсер создал этот файл, input.txt.parsed.80.stp
[из]:
$ cat input.txt.parsed.80.stp
(FRAG (NR 应有尽有) (NR 的1�7) (NT 丰富) (NT 选择) (NN 宄1�7) (NN 射1�7) (NN 丄1�7) (NN 悄1�7) (NR 的1�7) (NT 旅程) (NT 增添) (NN 无数) (NN 的1�7) (NR 赏心) (NR 乐事) (VV 〄1�7))
Затем я попытался закодировать предложение в GB18030:
$ bash lexparser-lang.sh Chinese 80 edu/stanford/nlp/models/lexparser/chinesePCFG.ser.gz parsed input-gb18030.txt
Loading parser from serialized file edu/stanford/nlp/models/lexparser/chinesePCFG.ser.gz ... done [1.0 sec].
Parsing file: input-gb18030.txt
Parsing [sent. 1 len. 16]: Ӧ�о��� �� �ḻ ѡ�� �� �� Ϊ �� �� �ó� ���� ���� �� ���� ���� ��
Parsed file: input-gb18030.txt [1 sentences].
Parsed 16 words in 1 sentences (19.90 wds/sec; 1.24 sents/sec).
alvas@ubi:~/stanford-parser-full-2015-04-20$ cat input-gb18030.txt.parsed.80.stp
(IP
(NP
(CP
(IP
(VP (VV Ӧ�о���)))
(DEC ��))
(ADJP (JJ �ḻ))
(NP (NN ѡ��)))
(VP (VV ��)
(VP
(ADVP (AD ��))
(PP (P Ϊ)
(NP
(DNP
(NP (PN ��))
(DEG ��))
(NP (NN �ó�))))
(VP (VV ����)
(NP
(DNP
(ADJP (JJ ����))
(DEG ��))
(NP (NN ����) (NN ����))))))
(PU ��))
Кажется, это работает, но как мне преобразовать файл обратно в UTF8?
Я пробовал это, но это не сработало:
$ cat input-gb18030.txt.parsed.80.stp | python -c "print raw_input().decode('GB18030').encode('utf8')"
(IP
Вот несколько заключительных вопросов:
- Как мне конвертировать между GB18030 в UTF8 и UTF8 в GB18030?
- Как использовать Stanford LexParser для текста на китайском UTF8?
1 ответ
Я следовал вашим шагам, и это показывает, что вы можете просто использовать конвертеры кодирования для достижения своей цели.
я использую iconv
в моем тестировании.
iconv -f GB18030 -t UTF-8 input2.txt.parsed.80.stp -o output
Вот мой вывод:
dmk@dmk-debian /t/stanford-parser-full-2015-04-20 ❯❯❯ cat input2.txt.parsed.80.stp
(IP
(NP
(CP
(IP
(VP (VV Ӧ�о���)))
(DEC ��))
(ADJP (JJ �ḻ))
(NP (NN ѡ��)))
(VP (VV ��)
(VP
(ADVP (AD ��))
(PP (P Ϊ)
(NP
(DNP
(NP (PN ��))
(DEG ��))
(NP (NN �ó�))))
(VP (VV ����)
(NP
(DNP
(ADJP (JJ ����))
(DEG ��))
(NP (NN ����) (NN ����))))))
(PU ��))
dmk@dmk-debian /t/stanford-parser-full-2015-04-20 ❯❯❯ iconv -f GB18030 -t UTF-8 input2.txt.parsed.80.stp -o output
dmk@dmk-debian /t/stanford-parser-full-2015-04-20 ❯❯❯ cat output
(IP
(NP
(CP
(IP
(VP (VV 应有尽有)))
(DEC 的))
(ADJP (JJ 丰富))
(NP (NN 选择)))
(VP (VV 定)
(VP
(ADVP (AD 将))
(PP (P 为)
(NP
(DNP
(NP (PN 您))
(DEG 的))
(NP (NN 旅程))))
(VP (VV 增添)
(NP
(DNP
(ADJP (JJ 无数))
(DEG 的))
(NP (NN 赏心) (NN 乐事))))))
(PU 。))