【发布时间】:2022-08-24 03:40:43
【问题描述】:
我有一个带有 300 万行社交媒体 cmets 的 pandas 数据框。我正在使用language-tool-python 库来查找评论中的语法错误数量。默认情况下,Afaik 语言工具库会在您的机器上设置本地语言工具服务器并从中查询响应。
获取语法错误的数量只包括创建语言工具对象的实例并使用您要检查的字符串作为参数调用.check() 方法。
>>> tool = language_tool_python.LanguageTool(\'en-US\')
>>> text = \'A sentence with a error in the Hitchhiker’s Guide tot he Galaxy\'
>>> matches = tool.check(text)
>>> len(matches)
2
所以我使用的方法是df[\'body_num_errors\'] = df[\'body\'].apply(lambda row: len(tool.check(row)))。现在我很确定这行得通。它非常直截了当。这行代码已经运行了一个小时。
因为运行上面的例子需要 10-20 秒,因此,如果有 300 万个实例,它还不如几乎永远持续下去。
有什么办法可以减少损失并加快这个过程?是否会遍历每一行并将整个内容放入 threadpoolexecutor 帮助?直觉上,这对我来说很有意义,因为它是一个 I/O 绑定任务。
我愿意接受有关如何加快此过程的任何建议,如果上述方法有效,如果有人可以向我展示一些示例代码,我将不胜感激。
编辑 - 更正。
实例化需要 10-20 秒,调用该方法几乎是瞬时的。
-
也许首先尝试使用
threadpoolexecutor。甚至在您的链接中也有示例代码。 -
只有
tool.check需要10-20 秒,还是包括实例化LanguageTool? -
@furas 我估计它现在需要大约几天的时间,如果它工作线程,它可能需要几个小时,我不想承诺解决方案,然后我才能相当有信心它会工作。因为我不知道它是否会在很长一段时间内完成。
-
我们不能说它是否适用于您的情况 - 您必须运行代码来测试它。
-
@roland-smith,我的错,实例化需要 10-20 秒,调用该方法几乎是瞬时的。
标签: python python-multithreading languagetool