将阵列的各个部分相互比较?

时间:2014-08-15 14:53:35

标签: java artificial-intelligence

我真的不确定解决这个问题的最佳方法是什么。我尽可能地得到了,但我基本上想要用一系列单词扫描用户响应并搜索匹配,以便我的AI可以根据他们使用的单词来判断某人的情绪。但是,我还没有找到明确或有用的答案。由于我尝试使用了多少种不同的方法,我的代码也非常杂乱。我要么需要一种方法来比较数组的各个部分或字符串的部分。我找到了找到阵列一部分的东西。就像在绿色的鸡蛋和火腿中找到鸡蛋一样,但我发现在另一个阵列的一个部分中找不到任何数组的部分。

     public class MoodCompare extends Mood1 {
        public static void MoodCompare(String inputMood){
            int inputMoodLength = inputMood.length();
            int HappyLength = Arrays.toString(Happy).length();
            boolean itWorks = false;

            String[] inputMoodArray = inputMood.split(" ");
            if(Arrays.toString(Happy).contains(Arrays.toString(inputMoodArray)) == true)
                System.out.println("Success!");

InputMood是用户输入的数据,应该让关键字潜伏在他们的心情中。 Happy是一个正在扩展的Mood1类的数组。这只是课程的一小部分,更不用说程序,但应该是我需要进行有效的比较以完成课程。 如果有人可以帮助我,你将节省我几个小时的工作。所以,谢谢!

3 个答案:

答案 0 :(得分:1)

当你不使用相对原始数组时,操作字符串会更好,你必须自己走过等等。一句荷兰谚语说:没有看到木头穿过树林。

在这种情况下,你似乎会针对一些情绪来检查输入的单词。

让我们使用java集合:

将输入字符串转换为单词列表:

String input = "...";
List<String> sentence = Arrays.asList(input.split("\\W+"));
sentence.remove("");

\\W+是一个或多个非单词字符的序列。心灵&#34;字&#34;意思是A-Za-z0-9_

现在心情会是一组独特的词:

Set<String> moodWords = new HashSet<>();
Collections.addAll(moodWords, "happy", "wow", "hurray", "great");

评估可能是:

int matches = 0;
for (String word : sentence) {
    if (moodWords.contains(word)) {
        ++matches;
    }
}
int percent = sentence.isEmpty() ? 0 : matches * 100 / sentence.size();
System.out.printf("Happiness: %d %%%n", percent);

在java 8中甚至更紧凑。

int matches = sentence.stream().filter(moodWords::contains).count();

<强> 说明:

句子中的foreach-words-in-sentence取代每个单词。对于每个单词,它会检查它是否包含在moodWords中,即所有情绪单词的集合。

这个百分比取决于句子中的单词数量是喜怒无常的。空句子的边界条件由if-then-else表达式... ? ... : ...处理 - 给出任意百分比0%的空句子。

printf格式使用%d表示整数,%%表示百分号%(自转),%n表示换行符。

答案 1 :(得分:0)

如果我正确理解你的问题,你的意思是这样的吗?

String words[] = {"green", "eggs", "and", "ham"};
String response = "eggs or ham";
Mood mood = new Mood();

for(String foo : words)
{
   if(response.contains(foo))
   {
      //Check if happy etc...
      if(response.equals("green")
         mood.sad++;
      ...
   } 

}

System.out.println("Success");
...

//CheckMood() etc... other methods.

答案 2 :(得分:0)

尝试使用令牌。

每次程序需要将一行中的行内容与另一个数组进行比较时,只需并行标记内容并进行比较。

访问以下Java Doc页面以获取更多参考:http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html

甚至查看以下网页: http://introcs.cs.princeton.edu/java/72regular/Tokenizer.java.html