nltk 对齐的句子显示损坏

zengzsys  于 2个月前  发布在  其他
关注(0)|答案(4)|浏览(31)

如果源词在目标句子中没有出现(或者反过来),AlignedSent 将完全无法显示:

  • _repr_svg_ 抛出 TypeError: list indices must be integers or slices, not NoneType
  • __str__ 抛出 TypeError: %d format: a number is required, not NoneType
1szpjjfi

1szpjjfi1#

感谢您报告此问题。
您能否提供一个示例和抛出错误的代码?

j2cgzkjk

j2cgzkjk2#

从ibm1测试脚本开始:
nltk/nltk/test/unit/translate/test_ibm1.py
第48行 640d39a
| | def test_prob_t_a_given_s(self): |
可以看到,None 在源语言侧是有效的,而UNUSED 在目标语言侧是有效的。所以:

print(Alignment([(0, 0), (None, 1)]))
>>> TypeError: unorderable types: int() > NoneType()

print(Alignment([(0, 0), (1, 1), (2, 'UNUSED')]))
>>> TypeError: %d format: a number is required, not str

但是也可以

print(Alignment([(0, 0), (1, None)]))
>>> TypeError: %d format: a number is required, not NoneType

对于其他函数:

als = AlignedSent('i remember'.split(), 'ich errinere mich'.split(), Alignment([(0, 0), (1, 1), (None, 2)]))
>>> TypeError: unorderable types: int() > NoneType()

als = AlignedSent('ich errinere mich'.split(), 'i remember'.split(), Alignment([(0, 0), (1, 1), (2, None)]))
als._repr_svg_()
>>> TypeError: list indices must be integers or slices, not NoneType
2izufjch

2izufjch3#

这将需要对AlignmentAlignSent对象进行一些重大更改,以包括NoneMap。但是,如果我们查看pharaoh规范,就没有必要添加它们。
所以当你有

Alignment([(0, 0), (None, 1)])

时,你可以简单地做:

Alignment([(0, 0)])

非Map将是隐式的。这不是Pythonic,但这是在使用MGIZA++、Pharaoh和Moses工具集时的规范。

yb3bgrhw

yb3bgrhw4#

是的,这些将会正确显示。

相关问题