gensim TextCorpus.sample_texts()没有使用get_texts(),

bmvo0sr5  于 4个月前  发布在  其他
关注(0)|答案(7)|浏览(142)

sample_texts()方法本应返回样本文档,但如果某个实现从TextCorpus派生并覆盖了get_texts(),那么这将被完全忽略,因为sample_texts()的实现仅使用getstream()
这适用于最近的开发(58d560b)和主要(885430d)分支。

pnwntuvh

pnwntuvh1#

你好@johann-petrak

  1. 我没有看到提到的提交与你的描述有任何关联
  2. 这是真的:sample_texts 只使用getstream,但是定义getstream有什么问题吗?
vaj7vani

vaj7vani2#

提交只是标识了我之前查看的仓库的版本。基本上,这意味着我谈论的是今天的版本。
正如我在原始报告中所说的问题是,文档声称为了使事情正常工作,需要实现 get_texts() 。那么一个合理的人可能会期望通过这样做,使用该实现的方法 sample_texts() 也能正确工作,但实际上并非如此。这就是继承的关键点。
我无法看到为什么 sample_texts() 不应该使用 get_texts() ,尤其是子类还可以选择不使用 preprocess_text 方法或以不同的方式使用它。如果 get_texts() 的实现控制了行为,那么所有方法都应该基于它,而不是基于一些任意或默认的行为,这些行为可能需要改变整个工作分配的方式。

wecizke3

wecizke33#

@johann-petrak 我部分同意你的观点,get_textsgetstream 在预处理步骤(子类应该重写它,用户不想使用它)之间的主要区别。不幸的是,如果我们现在尝试修复它,我们将破坏向后兼容性。
另一方面,我不认为当前实现有任何严重问题(但看起来有点奇怪,我同意)。
CC: @piskvorky@vlejd 关于这个问题有什么看法?

nr9pn0ug

nr9pn0ug4#

sample_texts() 使用被覆盖的 text_texts() 是正确且预期的方式使之工作,但如果破坏向后兼容性的风险太高,那么至少有必要记录这一点并建议在必要时覆盖/重新实现 sample_texts()
我并不真正需要 sample_texts(),我只是在测试代码时使用它,当它返回一些意外的结果时,我认为我的代码出了问题,需要一些时间来弄清楚发生了什么。

2lpgd968

2lpgd9685#

看起来像个bug。
@menshikh-iv ,你认为这里有什么向后兼容性风险?

omtl5h9j

omtl5h9j6#

@piskvorky,我仔细阅读了代码,发现sample_textget_texts(如预处理)重复了相同的工作,需要进行测试和比较。但可能这样就可以了(不会破坏其他功能),但我现在还不是百分之百确定。
只有一件事:这会变慢(因为在当前实现中,sample_text仅在文档被yield时使用preprocess_text,但如果我们切换到get_texts,我们将始终对文档进行预处理,这在处理大型数据集时可能会严重影响性能)。

mfpqipee

mfpqipee7#

我也遇到了这个问题。
for text in wiki.get_texts(): AttributeError: 'tuple' object has no attribute 'get_texts'
希望你能解决它,感谢你的辛勤工作。

相关问题