3

アプリケーションにスマート検索機能を実装しようとしています。ユースケース: ユーザーはテキストボックスに検索語を入力します

例:ブラジル出身の 28 歳のキリスト教徒の男性を見つけてください。

次のように、入力をマップに解析する必要があります。

性別:男性 年齢: 38 場所:ブラジル 宗教:キリスト教徒

OpenNLP、Cross Validate、Java Pattern Matching および Regex、Information Extraction についてはすでに確認済みです。どれを詳しく調べたらいいのか迷っています。

この特定のドメインですでに使用可能なJavaライブラリはありますか?

4

3 に答える 3

5

フリー テキストから構造化情報 (JSON) を抽出する API があります: http://wit.ai

達成したいことのいくつかの例でウィットをトレーニングする必要があります。

ここに画像の説明を入力

于 2013-08-10T18:32:37.320 に答える
1

単なるアプローチ(これを行うには多くの方法があると思います):必要に応じStringて a に分割し、String[]各単語を処理します:

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

編集:まあ、多くの人がこの答えが不十分だと考えているので、さらにヒントを追加します。

いくつかの検索条件を設定したクラスがあるとします (これらの条件に一致する人を取得したいと仮定します):

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>基本的な一致する単語で使用できるとしましょう:

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)ここで、少し変更します(このメソッドが上記のリストにアクセスできると仮定します)。

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;
    }
    ....
}

最後に、ユーザーの入力を処理する必要があります。

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

確かに、あなたはこれをもっとうまくやることができます。これは単なるアプローチです。検索をより正確に行いたい場合は、レーベンシュタインの距離について読んでください。たとえば、誰かが「Brazil」の代わりに「Brasil」を入れたり、「christian」の代わりに「cristian」を入れたりすると役に立ちます。

于 2013-08-08T13:32:12.007 に答える
1

これは、言語処理における非常に大きな研究分野であり、情報抽出と呼ばれています。必要なのが Java である場合、GATEは IE をかなり広範囲にサポートしています。

于 2013-08-12T10:39:51.403 に答える