【发布时间】:2011-03-22 21:02:49
【问题描述】:
在我的项目中,我通常使用文本。我发现预处理可能非常慢。所以我想问你是否知道如何优化我的代码。流程是这样的:
获取 HTML 页面 -> (到纯文本 -> 词干提取 -> 删除停用词) -> 进一步的文本处理
括号中是预处理步骤。应用程序运行大约 10.265 秒,但预处理需要 9.18 秒!现在是预处理 50 个 HTML 页面(不包括下载)的时间。
我使用 HtmlAgilityPack 库将 HTML 转换为纯文本。这是相当快的。转换1个文档需要2.5ms,还算可以。
问题来了。提取一份文档最多需要 120 毫秒。不幸的是,这些 HTML 页面是波兰语的。不存在用 C# 编写的波兰语词干分析器。我只知道用 Java 编写的两个免费使用:stempel 和 morfologic。我在 IKVM 软件的帮助下将 stempel.jar 预编译为 stempel.dll。所以没有什么可做的了。
消除停用词也需要很长时间(1 个文档约 70 毫秒)。这样做是这样的:
result = Regex.Replace(text.ToLower(), @"(([-]|[.]|[-.]|[0-9])?[0-9]*([.]|[,])*[0-9]+)|(\b\w{1,2}\b)|([^\w])", " ");
while (stopwords.MoveNext())
{
string stopword = stopwords.Current.ToString();
result = Regex.Replace(result, "(\\b"+stopword+"\\b)", " ");
}
return result;
首先,我删除所有数字、特殊字符、1 和 2 字母单词。然后在循环中我删除停用词。大约有 270 个停用词。
有没有可能让它更快?
编辑:
我想要做的是删除所有不超过 2 个字母的单词。所以我想取出所有特殊字符(包括'.'、','、'?'、'!'等)数字、停用词。我只需要可以用于数据挖掘的纯词。
【问题讨论】:
-
您是否考虑过使用 hashmap 来搜索单词,而不是一次一个地搜索?
标签: c# regex text-processing