首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从字符串中提取信息的Java算法

从字符串中提取信息的Java算法
EN

Stack Overflow用户
提问于 2013-08-08 13:22:53
回答 3查看 3.6K关注 0票数 3

我试图在我的应用程序中实现一个智能搜索功能。Usecase:用户在文本框中输入搜索词

给我找一个来自巴西的28岁的基督教男性。

我需要将输入解析为一个映射,如下所示:

性别:男性年龄: 38 Location: Brazil: Christian

已经看了一眼: OpenNLP,交叉验证,Java模式匹配和Regex,信息提取。我搞不懂我需要更深入地研究哪一个。

对于这个特定的域,是否已经有java库可用?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-10 18:32:37

有一个从自由文本中提取结构化信息的API:http://wit.ai

你需要用一些你想要达到的目标来训练Wit。

票数 5
EN

Stack Overflow用户

发布于 2013-08-08 13:32:12

只是一种方法(我认为有很多方法可以做到这一点):将String拆分为一个String[],并根据需要处理每个单词:

代码语言:javascript
复制
String str = "Find me a christian male 28 years old from Brazil";
for(String s : str.split(" ")){ //splits your String using space char
    processWord(s);
}

根据业务规则,processWord(s)应该做一些事情来确定s是否是一个关键词。

编辑:,由于很多人认为这个答案不够,我会再添加一些提示。

假设您有一个类,在其中放置一些搜索条件(假设您希望得到符合这些条件的人):

代码语言:javascript
复制
public class SearchCriteria {
    public void setGender(String gender){...}
    public void setCountry(String country){...}
    public void setReligion(String religion){...}
    ...
    public void setWatheverYouThinkIsImportant(String str){...}
}

正如@Sotirios在他的评论中指出的那样,你可能需要一个匹配的词库。假设您可以在基本匹配词中使用List<String>

代码语言:javascript
复制
List<String> gender = Arrays.asList(new String[]{"MALE","FEMALE","BOY","GIRL"...});
List<String> country = Arrays.asList(new String[]{"ALGERIA","ARGENTINA","AUSTRIA"...});
List<String> religion = Arrays.asList(new String[]{"CHRISTIAN","JEWISH","MUSLIM"...});

现在,我将修改一下processWord(s) (假设这个方法可以访问上面的列表):

代码语言:javascript
复制
public void processWord(String word, SearchCriteria sc){
    if(gender.contains(word.toUpperCase()){
        sc.setGender(word.toUpperCase());
        return;
    }
    if(country.contains(word.toUpperCase()){
        sc.setCountry(word.toUpperCase());
        return;
    }
    if(religion.contains(word.toUpperCase()){
        sc.setReligion(word.toUpperCase());
        return;
    }
    ....
}

最后,您需要处理用户的输入:

代码语言:javascript
复制
String usersInput = "Find me a christian girl 28 years old from Brazil"; //sorry I change "male" for "girl" but I like girls :P
SearchCriteria sc = new SearchCriteria();
for(String word : usersInput.split(" "){
    processWord(word, sc);
}
// do something with your SearchCriteria object

当然你能做得更好。这只是一种方法。如果你想要做更准确的搜索,读一读莱文的距离。例如,如果有人将“巴西”改为“巴西”或“克里斯蒂安”,这将对你有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2013-08-12 10:39:51

这是语言处理领域的一个相当大的研究领域:它被称为信息提取。如果是您想要的Java,对IE有相当广泛的支持。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18127183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档