如何从文本中提取所需的信息?

时间:2016-01-25 20:50:37

标签: json algorithm parsing time-complexity

我有很多出版物,我想从中解析并提取所需的有用信息。 假设我有这个出版物A

  明天上午12点从加利福尼亚州到阿拉斯加的2个地方可用。费用是100美元。这是我的电话号码814141243。

另一个B

  

德克萨斯州有一个地方。我们将于今天下午13点离开。将讨论成本。电话:2323575456。

我想找到使用具有线性复杂度的算法从这些出版物中提取数据的最佳方法。 对于每个出版物,算法必须产生:

{ "publication": [
      { "id":"A",
        "date":"26/01/2016",
        "time":"12AM",
        "from":"California",
        "to":"Alaska",
        "cost":"100$",
        "nbrOfPlaces":"2",
        "tel":"814141243" },
      { "id":"B",
        "date":"25/01/2016",
        "time":"13PM",
        "from":"",
        "to":"Texas",
        "cost":"",
        "nbrOfPlaces":"1",
        "tel":"2323575456" }
     ]
 }

所以我想从这些出版物中获取最多的信息。但显然问题在于出版物作者所选择的词语以及它们的结构。简单地说,出版物没有共同的结构,因此我无法轻易地解析和提取所需的信息。

是否有任何概念或范例可以解决这类问题?

注意:我不能强迫出版物的作者尊重文本的精确结构。

1 个答案:

答案 0 :(得分:1)

似乎所有评论都不鼓励你尝试这样做。但是,文本的变化似乎非常有限;我可以看到一个简单的算法,在大多数(但显然不是全部)输入中查找信息。我会尝试这样的事情:

  • 将文本拆分为interpunction:.;?!()中的部分,然后逐行查看文本;这将有助于确定背景。
  • 使用常用单词和缩写列表来确定每个信息位的位置。
  • 日期:查找日期或月份的名称,“今天”,“明天”或“12/31”等日期的典型符号。
  • 时间:查找“AM”,“PM”,“早晨”,“中午”等组合,或“12:30”等典型时间符号
  • 路线:寻找“从”和“到”,可能与“前进”,“驾驶”,“旅行”等相结合,也许寻找大写字母来查找地名(和/或使用列表经常使用的目的地)。
  • 费用:查找包含“$”或“费用”或“价格”或类似内容的行,并查找号码,或典型的“待讨论”或“待定”字样。
  • 地方:寻找“地方”,“座位”,“人物”并找到号码,或“地点”,“座位”或“人物”,并得出结论有1个地方。
  • 电话:查找一定长度的数字序列,其间可能有空格或./()

如果您确定已找到信息的一部分,请将其标记为不再使用;例如如果你发现“8.30”和“AM”,那显然是一个时间。但是,如果您只是找到“8.30”,它可能是一个日期或时间,甚至是8.30美元。

您必须考虑到一小部分输入永远不会是机器可读的;类似于“在拂晓的时候离开大苹果,想和你一起去吗?你支付的费用就是天啊!”将永远需要人类的解释。