为什么我无法使用Python读取.conll文件令人困惑的解析错误?

问题描述

from pyconll import load_from_file

data = load_from_file("filename.conll")
data

我正在跟踪the documentation of pyconll来读取.conll文件,但是发生以下错误,我不明白这是什么意思。数据集应该是可读的,因为它有点像基准数据集。而且我看不到文档中可以指定的pyconll.load_from_file()其他任何参数。有人可以帮我吗?

加上,有没有办法通过.conll包读取nltk文件

ParseError                                Traceback (most recent call last)
<ipython-input-14-06859f7ce8b2> in <module>()
----> 1 data = load_from_file("filename.conll")
      2 data

5 frames
/usr/local/lib/python3.6/dist-packages/pyconll/unit/token.py in __init__(self,source,empty)
    661             error_msg = 'The number of columns per token line must be 10. Invalid token: {}'.format(
    662                 source)
--> 663             raise ParseError(error_msg)
    664 
    665         # Assign all the field values from the line to internal equivalents.

ParseError: The number of columns per token line must be 10. Invalid token: @paulwalk   O

解决方法

问题在于“CoNLL”格式在列的数量、顺序和内容方面有所不同。根据错误,您的解析器似乎期望 CoNLL-U (https://universaldependencies.org/format.html) 或 CoNLL-X(原始网站关闭)。无论您输入什么,错误都声称未找到预期的列数 (10),请参阅 What is CoNLL data format?

但是,如果您确实有 10 列,请尝试转义预期的标记,可能某些内部正则表达式替换失败。

关于用 NLTK 解析 CoNLL 的子问题,请参阅问题(!)Parsing CoNLL-U files with NLTK 中的详细信息。解析一些 CoNLL 格式是可能的,但NLTK 似乎不支持更新的CoNLL 格式,尤其是不支持CoNLL-X 和CoNLL-U。它可能适用于您的数据(因为这既不是 CoNLL-X 也不是 CoNLL-U)。

,

我遇到了同样的问题。我通过将 pyhton 库切换到 conllu https://pypi.org/project/conllu/ 来修复它。现在我可以毫无问题地读取和解析我所有的 CoNLL-U 文件。我认为 https://stackoverflow.com/a/66563362/7924573 解释了原因。