我有很多出版物,我想从中解析和提取所需的有用信息。
假设我有这个出版物 A
2 places available tomorrow at 12AM from California to Alaska. Cost is 100$. And this is my phone number 814141243.
另一个B
One place available to Texas. We will be leaving at 13PM today. Cost will be discussed. Tel: 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" }
]
}
所以我想从这些出版物中获得最多的信息。但显然,问题出在出版物作者选择的词语及其结构上。简而言之,出版物没有共同的结构,因此我无法轻松解析和提取所需的信息。
是否有处理此类问题的概念或范例?
注意:我不能强制出版物的作者遵守精确的文本结构。
最佳答案
似乎所有评论都在阻止您尝试这样做。然而,文本的变化似乎非常有限;我可以看到一个简单的算法可以在大多数(但显然不是全部)输入中找到信息。我会尝试这样的事情:
- 将文本按标点拆分成多个部分:
.;?!()
然后逐行查看文本;这将有助于确定上下文。 - 使用常用词和缩写的列表来确定每一位信息的位置。
- 日期:查找日期或月份的名称、“今天”、“明天”或典型的日期符号,如“12/31”。
- 时间:寻找与“AM”、“PM”、“morning”、“noon”等的组合,或者像“12:30”这样的典型时间符号
- 路线:查找“from”和“to”,可能与“going”、“driving”、“traveling”等结合使用,并且可能查找大写字母以查找地名(和/或使用列表经常使用的目的地)。
- 成本:查找包含“$”或“成本”或“价格”或类似内容的行,并找到数字,或典型的“待讨论”或“待确定”措辞。
- Places:查找“places”、“seats”、“people”并找到数字,或者“place”、“seat”或“person”并得出有 1 个地方的结论。
- 电话:寻找一定长度的数字序列,它们之间可能有空格或
./()
。
如果您确定找到了部分信息,请将其标记,以免再次使用;例如如果您找到“8.30”和“AM”,则显然是时间。但是,如果您只找到“8.30”,它可能是日期或时间,甚至是 $8.30。
您必须考虑到一小部分输入永远不会是机器可读的;诸如“黎明时分去大苹果,想一起去吗?你付了汽油费——莫赫——不!”总是需要人工解释。
关于json - 如何从文本中提取需要的信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35002094/