1

这就是问题所在。我有一堆大文本文件,其中包含书面材料的段落和段落。每个段落都包含对几个人(姓名)的引用,并记录了一些主题(地点、对象)。

我如何对这堆数据进行挖掘以组装一些分类库?...一般来说,有两件事。

  1. 我不知道我在找什么,所以我需要一个程序来获取最常用的单词/多个单词(“Jacob Smith”或“bluewater inn”或“arrow”)。

  2. 然后知道关键字,我需要一个程序来帮助我搜索相关的段落,然后对结果进行排序和细化(手动)。

4

6 回答 6

2

您的问题有点开放:) 很有可能,您会在UIMA 框架中找到您想要进行的任何分析的模块:

非结构化信息管理应用程序是分析大量非结构化信息以发现与最终用户相关的知识的软件系统。一个示例 UIM 应用程序可能会摄取纯文本并识别实体,例如人员、地点、组织;或关系,例如works-for 或located-at。UIMA 由很多东西组成

UIMA 可以将应用程序分解为组件,例如“语言识别”=>“语言特定分割”=>“句子边界检测”=>“实体检测(人/地名等)”。每个组件实现框架定义的接口,并通过 XML 描述符文件提供自描述元数据。该框架管理这些组件以及它们之间的数据流。组件是用 Java 或 C++ 编写的;在组件之间流动的数据是为这些语言之间的有效映射而设计的。

您可能还会发现Open Calais是一个有用的文本分析 API;根据您的文件堆有多大,它可能或多或少是合适的。

如果你想要它又快又脏——创建一个倒排索引来存储单词的所有位置(基本上是一个大的单词映射到它们出现的所有文件 id、这些文件中的段落、段落中的行等)。还索引元组,以便给定文件 ID 和段落,您可以查找所有邻居。这将按照您的描述进行,但需要进行大量调整才能获得有意义的相关性(一些关键字可以让您开始搜索:信息检索、TF-IDF、Pearson 相关系数)。

于 2009-10-15T22:14:08.523 回答
1

看起来您正在尝试创建索引?

我认为Learning Perl 有关于在文本文件中查找单词频率的信息,所以这不是一个特别难的问题。

但是你真的想知道“the”或“a”是最常见的词吗?

如果您正在寻找某种主题索引,那么您真正关心的单词可能会在列表的下方,与更多您不关心的单词混合在一起。

您可以先去掉列表前面的“停用词”以稍微过滤一下您的结果,但没有什么比关联真正反映段落主题的关键字更好的了,这需要上下文。

无论如何,我可能会离开基地,但你去吧。;)

于 2009-10-15T21:15:29.667 回答
1

你问的问题是你不知道你在找什么。如果您有某种您关心的术语的加权列表,那么您的状态就会很好。

从语义上讲,问题是双重的:

  • 通常,最常用的词是最不相关的。即使您使用停用词文件,也会留下很多谷壳
  • 通常,最少使用的词是最相关的。例如,“bluewater inn”可能很少见。

让我们假设您有一些东西可以满足您的要求,并生成了一个包含所有出现在您的文本中的关键字的干净列表。会有成千上万个这样的关键字。在 1000 多个术语的列表中找到“bluewater inn”实际上比在段落中找到它更难(假设你不知道你在寻找什么),因为你可以浏览文本并且你会找到包含的段落"bluewater inn" 因为它的上下文,但你在列表中找不到它,因为列表没有上下文。

您为什么不多谈谈您的申请和流程,然后也许我们可以为您提供更好的帮助?

于 2009-10-15T21:59:03.603 回答
1

我认为您想要做的就是所谓的“实体提取”。这篇 Wikipedia 文章有一个很好的概述和应用程序列表,包括开源应用程序。我曾经使用列表中的一种商业工具,但不是以编程能力,所以我无法帮助你。

于 2009-10-15T22:02:55.483 回答
1

Ned Batchelder在 DevDays Boston 上就 Python 做了一场精彩的演讲。

他展示了一个用 Python 编写的拼写纠正器,它几乎完全符合您的要求。

您可以在此处找到幻灯片和源代码:http: //nedbatchelder.com/text/devdays.html

于 2009-10-15T22:21:56.213 回答
1

我建议你看看 R。特别是看tm包装。以下是一些相关链接:

更一般地说,在 CRAN 的自然语言处理视图上有大量的文本挖掘包。

于 2009-10-31T17:02:57.563 回答