注:ソースコードには複数のクラスが含まれていますので、時間のために私は投稿しません。私がうまく説明できないなら、許してください。私はこれについて多くのことをしてきましたが、私の説明は私には意味がありますが、他人には理解できないかもしれません。Java: "上位のカテゴリ"タスクのためにarraylistsを互いに結びつけてください
私はどのカテゴリのユーザー入力が属するのかを判断する作業があります。たとえば、ユーザーが入力した場合:私は犬と猫が大好きです。 プログラムは、トップ2のカテゴリー出力すること: 犬、 猫
ユーザーが入力のみ場合
:「私は犬を愛する」は、プログラムが出力として上位2カテゴリ「犬は、他のカテゴリが見つからない」だろうカテゴリーが1つしか見つからないか、まったく見つからない場合は、「カテゴリなし」がデフォルトの応答です。
私は以下のカテゴリの配列リストを作成しました:犬、猫、鳥。これらのarraylistsには、ユーザ入力がどのカテゴリに入るのかをプログラムが認識するようにするキーワードが含まれています。
私は基本的に、可能性の最も高い尤度と2番目に高い尤度を得る必要があります。カテゴリが何であるかを出力します。
これは私のコードです。これは、上位2つの可能性を上位に持ち、それらをコンソールに出力しようとします。 私の問題は、それぞれの文字列にリンクするカテゴリを取得して、最も高い可能性のあるカテゴリが出力されるようにします。
ユーザ入力:
//Create prioritization
int topDouble = 0;
String topString = "no category"; //default response
int secondDouble = 0;
String secondString = "no category"; // default response
ArrayList<Double> likelyDouble = new ArrayList<Double>();
likelyDouble.add(cats);
likelyDouble.add(dogs);
likelyDouble.add(birds);
ArrayList<String> likelyString = new ArrayList<String>();
likelyString.add("you talked about cats");
//to parallel likelyDouble cats category
likelyString.add("you talked about dogs");
//to parallel likelyDouble dogs category
likelyString.add("you talked about birds");
//to parallel likelyDouble cats category
int count = 0;
for (double d : likelyDouble){
if((d>0) && (d > topDouble)){
topDouble = (int) d;
topString = likelyString.get(count);
}
else if((d>0) && (d > secondDouble)){
secondDouble = (int) d;
secondString = likelyString.get(count);
}
}
System.out.print(topString + "\n");
System.out.print(secondString);
出力は、私はデフォルトを取得し は私が犬や猫が好き。
犬
なしカテゴリ
FYIプログラムは、ユーザーが特定のカテゴリについて話されている可能性がカテゴリが参照された回数の文と数の位置に基づいて決定します。尤度は計算された値です。カテゴリがまったく言及されていない場合は、尤度は0です。
ありがとうございました!
'count'は決してインクリメントされないので、あなたのプログラムによれば、_あなたは猫について話していて_ _" Dogs "としか言わない' likelyString'の最初の要素をいつも得られます_ –
なぜなら二?実際には、見つかったカテゴリの_list_を返してください。どのカテゴリでもかまいません。あなたは確かに2つの要素を見直すことはできませんが、将来この制限があるかもしれません。ああ...そしてシソーラスを基本的に作ってみたいと思っています - 私はちょうど「犬」に入れるとどうなりますか?それで、最低限、複数のハッシュマップを使って作業をしてください。 –