从大文本建立词典

时间:2010-04-06 19:43:25

标签: lucene nlp

我有一个包含英文/意大利文帖子的文本文件。我想将帖子读入数据矩阵,以便每行代表一个帖子,每列代表一个单词。矩阵中的单元格是每个单词在帖子中出现的次数。字典应包含整个文件中的所有单词或非详尽的英语/意大利语字典。

我知道这是NLP常见的必要预处理步骤。而且我知道对它进行编码非常简单,我希望使用一些NLP域特定工具,这样我就可以修剪掉句子等等。

有没有人知道可以执行此任务的工具\项目?

有人提到了apache lucene,你知道lucene索引是否可以序列化为类似于我需要的数据结构?

4 个答案:

答案 0 :(得分:2)

也许你想看看GATE。它是文本挖掘和处理的基础设施。这就是GATE所做的(我从网站上得到了这个):

  • 能够解决几乎所有文本处理问题的开源软件
  • 一个成熟而广泛的开发者,用户,教育工作者,学生和科学家社区
  • 用于创建健壮且可维护的文本处理工作流程的已定义且可重复的过程
  • 主动使用各种语言处理任务和应用程序,包括:客户的声音;癌症研究;药物研究;决策支持;招聘;网络挖掘;信息提取;语义标注
  • 自1995年以来,由商业用户,EC,BBSRC,EPSRC,AHRC,JISC等资助的数百万欧元R& D计划的成果。
  • 全球企业,中小企业,研究实验室和大学使用
  • 自然语言工程的Eclipse,信息提取的Lucene,文本挖掘的ISO 9001

答案 1 :(得分:2)

你想要的是如此简单,以至于在大多数语言中,我建议你使用从字符串映射到整数的散列表数组来推出自己的解决方案。例如,在C#中:

foreach (var post in posts)
{
  var row = new Dictionary<string, int>();

  foreach (var word in GetWordsFromPost(post))
  {
    IncrementContentOfRow(row, word);
  }
}

// ...

private void IncrementContentOfRow(IDictionary<string, int> row, string word)
{
  int oldValue;
  if (!row.TryGet(word, out oldValue))
  {
    oldValue = 0;
  }

  row[word] = oldValue + 1;
}

答案 2 :(得分:0)

你可以看看:

  • bow - 一个用于文本分类的资深C库;我知道它存储矩阵,可能需要一些黑客来获取它。
  • Weka - 一个可以处理文本并构建矩阵的Java机器学习框架
  • Sujit Pal's blog post从头开始构建术语 - 文档矩阵
  • 如果您坚持使用Lucene,则应使用术语向量创建索引,并使用类似于getTermFreqVector()的循环来获取矩阵。

答案 3 :(得分:0)

感谢@Mikos的评论,我搜索了术语“术语 - 文档矩阵”并找到TMG(文本到矩阵生成器)。

我发现它适合我的需要。