У меня возникают проблемы с моей картой синонима. Я хочу, чтобы иметь возможность искать текстовый файл для ключевого слова или связанного слова в текстовом файле, а затем выводить найденное предложение. поэтому моя программа ищет ответы на вопросы, основанные на ключевом слове или субониме. как моя программа работает, путем поиска текстового файла для ключевого слова в вопросе, а затем вывода ответа на вопрос, который является следующей строкой после того, как вопрос в текстовом файле. Когда я ищу ключевое ключевое слово в вопросе, программа работает. Но когда я пытаюсь задать вопрос со связанным словом, программа не распознает входные данные. Так, например, если я вхожу «как главный?» ответ на этот вопрос находится на следующей строке, которая является «основной проблемой», но если я вхожу «как фокус», программа не распознает связанное слово focus Может кто-нибудь помочь мне найти проблему, которая заключается в поиске для связанного слова также. Вот мой текстовый файлПоиск определенной строки текста в текстовом файле
what is the textbook name?
the textbook name is Java
how is the major?
the major is difficult
how much did the shoes cost?
the shoes cost two dollars
how is the major when cramer took it?
when cramer took it, it was okay
how is the major when jar took it?
jar said it was fine
what is the color of my bag?
the color of my bag is blue
и вот мой код
public static class DicEntry {
String key;
String[] syns;
Pattern pattern;
public DicEntry(String key, String... syns) {
this.key = key;
this.syns = syns;
pattern = Pattern.compile(".*(?:"
+ Stream.concat(Stream.of(key), Stream.of(syns))
.map(x -> "\\b" + Pattern.quote(x) + "\\b")
.collect(Collectors.joining("|")) + ").*");
}
}
public static void parseFile(String s) throws IOException {
List<DicEntry> synonymMap = populateSynonymMap(); // populate the map
File file = new File("data.txt");
Scanner scanner = new Scanner(file);
Scanner forget = new Scanner(System.in);
int flag_found = 0;
while (scanner.hasNextLine()) {
final String lineFromFile = scanner.nextLine();
for (DicEntry entry : synonymMap) { // iterate over each word of the
// sentence.
if (entry.pattern.matcher(s).matches()) {
if (lineFromFile.contains(entry.key)) {
//String bat = entry.key;
if(lineFromFile.contains(s)) {
String temp = scanner.nextLine();
System.out.println(temp);
}
}
}
}
}
}
private static List<DicEntry> populateSynonymMap() {
List<DicEntry> responses = new ArrayList<>();
responses.add(new DicEntry("bag", "purse", "black"));
responses.add(new DicEntry("shoe", "heels", "gas"));
responses.add(new DicEntry("major", "discipline", "focus", "study"));
return responses;
}
public static void getinput() throws IOException {
Scanner scanner = new Scanner(System.in);
String input = null;
/* End Initialization */
System.out.println("Welcome ");
System.out.println("What would you like to know?");
System.out.print("> ");
input = scanner.nextLine().toLowerCase();
parseFile(input);
}
public static void main(String args[]) throws ParseException, IOException {
/* Initialization */
getinput();
}
}
Пожалуйста, попробуйте удалить ненужный пар ts из вашего кода (например, задавать и писать ответы на вопросы, не найденные в текстовом файле). – siegi