【问题标题】:Extracting Fields Value using Lucene使用 Lucene 提取字段值
【发布时间】:2013-11-24 11:33:27
【问题描述】:

我的问题是我只想用文本数据解析一个文档(而不是多个文档),并根据我的查询提取一些相关信息。

例如: 如果我有以下文字:

This is a sample document.
Name: Te
Age: 25
Email: te@gmail.com
Some text in the end of the document

我想提取具有相应值的字段(姓名、年龄、电子邮件)

我找到的许多示例主要是搜索与查询匹配的文档。如果有人能指导我在 lucene 库中查找哪些 Analyzer 或 Query 类或任何要阅读的材料,我将不胜感激。

【问题讨论】:

  • 我不知道 Lucene 中用于广义提取字段/值对的功能。为什么要使用 Lucene?
  • 嗯,我的想法是使用 lucene 来索引文件和查询,例如关键字“名称”,以便获得该术语在文本中的位置。之后,我会从该位置获得以下 n 个连续标记作为“Name”的值,直到我点击另一个关键字“Age”,依此类推。如果我使事情复杂化,请纠正我。如果您可以建议我使用 Lucene 以外的其他库,请告诉我。谢谢
  • 如果您只需要提取姓名、年龄和电子邮件及其各自的值,我会使用正则表达式。

标签: lucene information-retrieval information-extraction


【解决方案1】:

这应该可以帮助您入门。使用正则表达式,在 Java 中,文档内容已分配给变量 text

String expr = "Name\:\s(\w+)\sAge\:\s+(\d+)\s+Email\:\s+([a-z0-9.@]+)\s+";
Pattern r = Pattern.compile(expr, Pattern.CASE_INSENSITIVE);
Matcher m = r.matcher(text);
if (m.find( ))
{
    System.out.println("Name: " + m.group(1) );
    System.out.println("Age: " + m.group(2) );
    System.out.println("Email: " + m.group(3) );
}
else { System.out.println("Match not found"); }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    相关资源
    最近更新 更多