许多方法,如 visualize_documents
,需要一个 docs
参数,该参数应该是一个列表。但大多数时候,我的文档存储在一个 pd.dataframe
中,因为它们与其他元数据相关联,而我经常不小心将数据框传递给这些方法,而不是传递列表。尽管输入有类型检查:
https://github.com/MaartenGr/BERTopic/blob/62e97ddea6cdcf9e4da25f9eaed478b22a9f9e20/bertopic/plotting/_documents.py#L9C1-L11C50
它不会抛出一个有用的错误(例如 'docs 应该是一个 List 类型'),而是会抛出一个带有随机数字的 KeyError,这通常需要花费大量的时间来调试,直到我想起我曾经在这里犯过错误,才知道我做错了什么。
有没有可能让所有这些方法进行更严格的类型检查,或者在输入上检查数据框?
2条答案
按热度按时间lnxxn5zx1#
尽管输入有类型检查:
从技术上讲,输入上并没有类型检查,只有类型提示。这种差异部分源于Python的一些设计哲学,其中不强制执行类型。
这些方法中是否有任何一种可以进行更严格的类型检查,或者在输入上检查数据框?
当然,我需要检查最佳实现。我认为严格类型检查在这里并不是解决方案,因为如果我在这里开始这样做,我不应该为所有其他变量也这样做吗?然而,允许传递pandas序列应该是可能的。但是,将整个pandas数据框作为参数传递则是另一回事,因为这也需要检查要使用的列,可能会引发一些问题。
v1l68za42#
从技术上讲,输入没有类型检查,只有类型提示。这种区别部分源于Python的一些设计哲学,其中不强制执行类型。
谢谢,我之前并没有意识到这个区别。
我应该为所有其他变量都这样做吗?
我明白你的意思。也许吧。但我认为大多数其他变量也相当具体,BERTopic(即用户专门创建它们以传递给BERTopic函数),所以它们更有可能从一开始就处于正确的格式。
docs
是例外,因为它们是任何文本分析管道的开始,用户可能对他们的文档做更多的事情,而不仅仅是运行BERTopic,所以我认为这是具有较高风险混淆和歧义的变量。当用户弄错时,KeyError不会给出如何修复它的很多指导。然而,一个完整的pandas数据框是另一回事,因为这也需要检查要使用的列,可能会引发一些问题。
当然不是建议你允许使用数据框。同意,太复杂了。