如何加速 language-tool-python 库用例

How to speed up language-tool-python library use case

我有一个 pandas 数据框,其中包含 300 万行社交媒体评论。我正在使用 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秒,调用方法几乎是瞬时的。

如果您担心 pandas 的扩展,请改用 Dask。它与 Pandas 集成,并将在您的 CPU 中使用多个内核,我假设您拥有,而不是 pandas 使用的 single-core。这有助于并行化 300 万个实例并可以加快执行时间。你可以阅读更多关于 dask here or see an example here.