从非结构化文本中提取信息

时间:2014-03-25 17:59:01

标签: nlp nltk

我收集了一些"文章",每篇长达1到10个句子,用嘈杂的非正式英语(即社交媒体风格)写成。 我需要从每篇文章中提取一些信息,如可用的日期和时间。我还需要了解文章的内容以及谁是主要的演员"。

示例,给出句子:"从10.30开始明天上午需要每个人的存在来讨论公司的财务预测。" ,I需要提取:

  • 日期/时间=> "明天早上10.30"。
  • 主题=> "公司的财务预测"。
  • the actor => "每个人"

据我所知,可以在不使用NLP技术的情况下提取日期和时间,但我还没有在Python中找到与Natty(http://natty.joestelmach.com/)一样好的东西。

我在阅读NLTK书籍的某些章节并观看有关Coursera的NLP课程的视频后,如何继续进行的理解如下:

  1. 使用部分数据创建带注释的语料库。由于文本的非正式性质(例如拼写错误,无法提供信息的大写,单词缩写等等),我无法使用现成的语料库。
  2. 手动(叹气......)使用Penn TreeBank标记集中的标签为每篇文章添加注释。 有没有办法自动执行此步骤并只检查/修复结果?
  3. 在带注释的文章上训练POS标记。我发现NLTK培训师项目似乎很有希望(http://nltk-trainer.readthedocs.org/en/latest/train_tagger.html)。
  4. Chunking / Chinking,这意味着我必须使用IOB表示法再次手动注释语料库(...)。不幸的是,根据这个错误报告,n-gram chunkers被破坏了:https://github.com/nltk/nltk/issues/367。这似乎是一个重大问题,让我想知道我是否应该继续使用NLTK,因为它已经超过一年了。
  5. 此时,如果我已经完成了所有事情,我会假设我会在块中找到演员,主题和日期时间。 正确吗?
  6. 我可以(暂时)跳过1,2和3并生成一个有效但可能具有高错误率的实现吗? 我应该使用哪种语料库?

    我还在考虑一个预处理步骤,以纠正常见的拼写错误或快捷方式,例如" yess"," c u"和其他可憎的。 我可以利用的任何已存在的东西?

    简而言之,问题是:我解决这个问题的方法是否正确?如果没有,我做错了什么?

2 个答案:

答案 0 :(得分:4)

  

我可以(暂时)跳过1,2和3并产生一个工作,但是   可能具有高错误率,实施?哪个语料库应该   我用?

     

我还想到了一个纠正常见拼写的预处理步骤   错误或快捷方式,如" yess"," c u"和其他可憎的。   我已经存在的任何东西都可以利用吗?

我建议你先处理标准语言文字。您引用的预处理本身就是一个NLP任务,称为规范化。这是Twitter规范化的资源:http://www.ark.cs.cmu.edu/TweetNLP/,另外,你可以使用拼写检查,句子边界检测,......

  简而言之,问题是:我的方法是解决这个问题   问题对不对?如果没有,我做错了什么?

如果你对规范化进行抽象,我认为你的方法是有效的。关于注释过程的自动化:您可以先使用现成的组件来引导过程,然后在不同的迭代过程中进行校正,重新训练等等。为了获得可接受的结果,您需要多次执行第2,3和4步。

如果您有兴趣了解问题并能够优化现有解决方案,我建议您专注于允许您开发自己的模型的工具。如果您优先考虑获得结果而不是开发自己的模型,我建议您查看现有的开源文本工程框架,例如Gate(https://gate.ac.uk/)UIMA(http://uima.apache.org/)和DKPro(扩展UIMA) (https://code.google.com/p/dkpro-core-asl/)。所有这三个框架都包含现有组件,因此您可以使用各种可能的解决方案。

答案 1 :(得分:0)

我建议试试NER和Temporal Normalizer。 以下是我为您的例句所看到的内容: enter image description here

您可以在此处尝试演示: http://deagol.cs.illinois.edu:8080/