2010-11-08 100 views
2

我有一个简单的问题。我正在做一些轻量级的抓取,因此每隔几天就会有新的内容到达。我写了一个标记器,并希望将其用于某些文本挖掘目的。具体来说,我使用Mallet的主题建模工具,其中一个管道将文本标记为令牌,然后才能完成进一步处理。随着我的数据库中的文本数量,它需要大量的时间标记文本(我在这里使用正则表达式)。在db中存储标记文本?

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

+1

您还没有足够清楚地描述您的方法以获得有意义的答案。您能否举出令牌生成器进程的输入和输出示例,以及为什么您认为它是一个瓶颈。 – 2010-11-08 13:32:32

+0

@Terrel,我编辑了我的问题。现在希望它更清楚。 – goh 2010-11-08 13:54:01

+1

根据您的其他问题,我对您正在努力完成的任务有更好的了解。你询问的正则表达式类型非常慢,所以我认为现有的标记器(如dmcer所建议的)会更快。 Feedparser和beautifulsoup是将文本从博客中输入到标记器中的最佳Python解决方案。是的,我会缓存这个阶段的输出。 – 2010-11-08 21:52:50

回答

1

缓存中间表示

这是非常正常的缓存由慢的组件,可以在文档处理管道创建的中间表示。例如,如果您需要dependency parse trees用于每个文档中的所有句子,那么执行任何操作(除之外的任何内容都会解析文档一次,然后重新使用结果)会非常疯狂。

慢符号化

不过,我是惊喜断词是真的对你慢的,因为从符号化下游的东西通常是真正的瓶颈。

你使用什么软件包来执行标记化?如果您使用的是Python并且您自己编写了代码化代码,则可能需要尝试使用NLTK(例如,TreebankWordTokenizer)中包含的代理程序之一。

另一个好标记生成器,虽然是不是用Python写一个,是包含在Stanford ParserStanford CoreNLP终端到终端的NLP管道PTBTokenizer

+0

感谢您的回答。或许正如@Terrel所建议的那样,我在自己的分词器中使用了一些非常缓慢的正则表达式(有些用于正确标记表情符号)。将检查他们。我已经尝试过ntlk treebankwordtokenizer,但是也许我可以自己动手构建一个自己的手(基于Penn Treebank约定)。 – goh 2010-11-09 02:19:48

0

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