【问题标题】:NLTK WordNet error with a word look up using synsets使用同义词查找单词的 NLTK WordNet 错误
【发布时间】:2023-03-11 08:19:01
【问题描述】:

我将 Python 3.6 与 NLTK 3.2.3 一起使用,并且仅针对“escort”一词收到“WordNetError”。我没有得到任何其他词的错误。这是使用“狗”一词显示成功和使用“护送”一词的错误的成绩单:

Python 3.6.0 |Anaconda custom (64-bit)| (default, Dec 23 2016, 12:22:00) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from nltk.corpus import wordnet
>>> wordnet.synsets('dog')
[Synset('dog.n.01'), Synset('frump.n.01'), Synset('dog.n.03'), Synset('cad.n.01'), Synset('frank.n.02'), Synset('pawl.n.01'), Synset('andiron.n.01'), Synset('chase.v.01')]
>>> wordnet.synsets('escort')
Traceback (most recent call last):
  File "/home/user1/.conda/envs/ca/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py", line 1403, in _synset_from_pos_and_line
    offset = int(_next_token())
ValueError: invalid literal for int() with base 10: '02026433\x00v'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/user1/.conda/envs/ca/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py", line 1491, in synsets
    for p in pos
  File "/home/user1/.conda/envs/ca/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py", line 1493, in <listcomp>
    for offset in index[form].get(p, [])]
  File "/home/user1/.conda/envs/ca/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py", line 1335, in synset_from_pos_and_offset
    synset = self._synset_from_pos_and_line(pos, data_file_line)
  File "/home/user1/.conda/envs/ca/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py", line 1448, in _synset_from_pos_and_line
    raise WordNetError('line %r: %s' % (data_file_line, e))
nltk.corpus.reader.wordnet.WordNetError: line '02025829 38 v 01 escort 0 006 @ 02025550 v 0000 + 09992538 n 0102 ~ 02026203 v 0000 ~ 02026327 v 0000 ~ 02026433\x00v 0000 ~ 02026712 v 0000 04 + 08 00 + 09 00 + 20 00 + 21 00 | accompany as an escort; "She asked her older brother to escort her to the ball"  \n': invalid literal for int() with base 10: '02026433\x00v'

但是,当我使用http://wordnetweb.princeton.edu/perl/webwn 的在线 WordNet 搜索工具时,它会按预期执行查找。最新的 WordNet 语料库是使用 nltk.download() 下载的。

当它期望找到一个整数值时,该错误似乎在 WordNet 定义中引用了一个十六进制值。

有什么想法吗?请告知您是否遇到过这样的事情。

【问题讨论】:

  • 当我从几个线程中使用 python wordnet 时,我得到了这些异常。那里的某些东西不是线程安全的。

标签: python nltk wordnet


【解决方案1】:

在仔细检查“动词”字典文件后,我发现它实际上已损坏。这是它在像“vi”这样的编辑器中的样子:

02025829 38 v 01 escort 0 006 @ 02025550 v 0000 + 09992538 n 0102 ~ 02026203 v 0000 ~ 02026327 v 0000 ~ 02026433^@v 0000 ~ 02026712 v 0000 04 +

我用空格替换了“^@”,问题就消失了。我想更大的问题是它最初是如何被破坏的。

问题解决了!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 2013-07-14
    • 2015-05-20
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多