如何使用Stanford LexParser中文文本?

时间:2015-06-15 10:47:48

标签: encoding utf-8 nlp stanford-nlp

我无法为Stanford NLP's LexParser获取正确的输入编码。

如何将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,解析器接受了以下培训:

  

中国   中文语法只是在大陆材料上训练   来自新华社和来自最不发达国家中国树库的更多混合材料。该   默认输入编码为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

[OUT]:

$ 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 个答案:

答案 0 :(得分: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 。))