【问题标题】:Storing tokenized text in the db?在数据库中存储标记化的文本?
【发布时间】:2010-11-11 12:03:37
【问题描述】:

我有一个简单的问题。我正在做一些轻微的爬行,所以每隔几天就会有新的内容出现。我编写了一个标记器,并希望将其用于某些文本挖掘目的。具体来说,我正在使用 Mallet 的主题建模工具,其中一个管道是将文本标记为标记,然后再进行进一步处理。由于我的数据库中有大量文本,标记文本需要花费大量时间(我在这里使用正则表达式)。

因此,将标记化的文本存储在数据库中是否是一种规范,以便标记化的数据可以随时可用并且如果我需要它们用于其他文本挖掘目的(例如主题建模、POS 标记)可以跳过标记化?这种方法有什么缺点?

【问题讨论】:

  • 您的方法描述得不够清楚,无法得到有意义的答案。您能否举例说明分词器流程的输入和输出以及您认为它是瓶颈的原因。
  • @Terrel,我已经编辑了我的问题。希望现在更清楚。
  • 根据您的其他问题,我对您要完成的工作有更好的了解。你问的那种正则表达式非常慢,所以我认为现有的标记器(如 dmcer 所建议的)会做得更快。 Feedparser 和 beautifulsoup 是最好的 python 解决方案,用于从博客中获取文本以输入到分词器中。是的,我会缓存这个阶段的输出。
  • @Terrel,感谢您的 cmets。我将看看现有的标记器,并仔细检查我现有的正则表达式。是的,我现在会使用 feedparser 和 beautifulsoup。

标签: python caching postgresql nlp tokenize


【解决方案1】:

缓存中间表示

在文档处理管道中缓存由较慢组件创建的中间表示是很正常的。例如,如果每个文档中的所有句子都需要dependency parse trees,那么除了只解析一次文档然后重用结果就太疯狂了。

标记化缓慢

但是,我很惊讶标记化对您来说真的很慢,因为标记化下游的东西通常是真正的瓶颈。

您使用什么包进行标记化?如果您使用 Python 并编写了自己的标记化代码,您可能想尝试 NLTK 中包含的标记器之一(例如,TreebankWordTokenizer)。

另一个很好的标记器,虽然不是用 Python 编写的,但它是包含在 Stanford ParserStanford CoreNLP 中的 PTBTokenizer 端到端结束 NLP 管道。

【讨论】:

  • 感谢您的回答。也许正如@Terrel 所建议的那样,我在自己的标记器中使用了一些非常慢的正则表达式(一些用于正确标记笑脸)。会检查他们。我已经尝试过 ntlk treebankwordtokenizer,但我想也许我可以自己动手构建一个(基于 Penn Treebank 约定)。
【解决方案2】:

我将标记化的文本存储在 MySQL 数据库中。虽然我并不总是喜欢与数据库通信的开销,但我发现我可以要求数据库为我执行许多处理任务(例如在依赖分析树中搜索复杂的句法模式)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 2023-02-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    相关资源
    最近更新 更多