我必须从一个字符串确定起始和到达城市

时间:2017-10-31 13:56:22

标签: java string input split output

我有以下代码,通过键盘输入,给我开始和到达..开始是根据“da”命题确定的,而到达根据介词“a”确定它所以我现在的战斗是:即使我改变了命题的顺序,我也希望得到开始和到来......你知道我怎么能继续......     这是我得到的输出:

    I want to go from ostuni to trapani

    Partenza :ostuni 

    Arrivo :trapani

    but if I wrote like this:

    I want to go to ostuni by trapani

    I would like to print the same start and finish correctly ..that is

    Patenza :trapani

    Arrivo :ostuni

    Is this processing possible?

thanks a lot for the attention! Good day

package eubot.controller;

import eubot.intent.Intent;

public class EubotEngine {
    public Intent getIntent(String stringInput) {
     String str1 = "";
     String str2 = "";
     Intent dictionary = null;


     for (String str3 : Intent.keyWord) {
     if (stringInput.contains(str3)) {

     //System.out.println("La stringa contiene : " + str3);
     int indice1 = stringInput.indexOf(str3) + str3.length();
     String splittable =
     stringInput.substring(indice1,stringInput.length()).trim();
     String splittable2[] = splittable.split(" ");
     int index = 0;
     for (String str : splittable2) {
     str = splittable2[index +1];
     str1 = str;
     System.out.println("Partenza :" + str1);
     break;
     }
     String splittable3[] = splittable.split(" ");
     for(String str : splittable3) {
     str = splittable3[index + 3];
     str2 = str;
     System.out.println("Arrivo :" + str2);
     break;
     }
     index++;
     dictionary = new Intent();
     dictionary.setTesto(stringInput);
     }
     }
     return dictionary;
     }
}

package eustema.eubot.intent;

public class Intent {

    public String testo;

    public String getTesto() {
        return testo;
    }

    public void setTesto(String testo) {
        this.testo = testo;
    }

    public static String[] keyWord = { "devo andare", "voglio andare", "vorrei andare", "devo recarmi"};

    public static String[] parameter = { "bari", "roma", "milano","pisa","firenze","napoli","como","torino" };
}
package eustema.eubot.main;

import java.util.Scanner;

import eustema.eubot.controller.*;
import eustema.eubot.intent.*;

public class Test {

    public static void main(String[] args) {

        System.out.println("<<-|-|-|-|-|-|-|-|-|<<<BENVENUTO IN EuBoT>>>|-|-|-|-|-|-|-|-|->>");
        EubotEngine controller = new EubotEngine();
        Scanner input = new Scanner(System.in);
        String string;
        while (true) {
            string = input.nextLine();
            Intent intent = controller.getIntent(string);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我知道这不会被认为是一个好的答案:)

通过命令式编程解决这个问题非常重要。原因是有许多形式可以表达相同的意图。填充词,同义词,反转以及一般你没想过的东西都可能会破坏你的算法。

当然,这取决于您想要达到的准确度。如果您对这不适用于所有情况感到高兴,您可以随时提出以下条件:

if (arr[index-1] == "from") setStart(arr[index]);
if (arr[index-1] == "to") setDestination(arr[index]);

谷歌,亚马逊和苹果正在努力改善这种人机交互,但他们正在通过机器学习使用更多的数学/统计方法。

所以,如果你正在寻找最先进的技术:

  • 主要搜索字词:无上下文语法。
  • 其他关键词:马尔可夫模型,信息提取,向量空间模型,tf-idf