我似乎无法为斯坦福大学的LexParser获得正确的输入编码。
如何使用斯坦福大学的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,对解析器进行了以下方面的培训:
那里有中文语法培训,仅仅是关于中国大陆的材料,来自新华社和更多的混合材料来自最不发达国家的中国树银行。默认的输入编码是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以下是一些结论性问题:
发布于 2015-10-09 07:08:43
我遵循了您的步骤,这表明您可以简单地使用编码转换器来实现您的目标。
我在测试中使用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 。))https://stackoverflow.com/questions/30843237
复制相似问题