bro*_*e45 7 java arrays string synonym chatbot
我正在编写一个程序,可以响应用户说的内容,比如聊天机器人.但是我想知道如果两个或更多的单词具有相同的含义,我是否可以理解它.
例如,当用户说"你害怕黑暗吗?"时,我会回答"是".但"害怕","害怕"和"受惊"具有相同的含义.如果用户使用"害怕"而不是"害怕"程序如何识别这两个词具有相同的含义,那么请参考"你害怕黑暗吗?" 问答"是"?
我不知道如果我可以做字符串数组像{"hello", "hi", "hey"}
或{"afraid", "scared", "frightened"}
等感谢您的帮助.
PS:我写的程序不使用英语,我担心我不能使用库或API,但我自己定义同义词列表没有问题.
我至少会使用称为面向对象的漂亮功能:
public class Word implements Comparable<Word> {
private String word;
private TreeSet<Word> synonyms;
//getter and setter
public void addSynonym(final Word word) {
synonyms.add(word);
}
@Override
public int compareTo(final Word other) {
if (this.word == null) {
return -1;
if (other == null || other.getWord() == null) {
return 1;
}
return this.word.compareTo(other.getWord());
}
}
Run Code Online (Sandbox Code Playgroud)
所以我们有一个 Word 类,带有一个同义词 TreeSet(用于快速搜索)。例如,可以从属性文件填充它,例如:
afraid=scared
hello=hey
Run Code Online (Sandbox Code Playgroud)
所有单词都可以存储在 TreeSet 中:
private TreeSet<Word> allWords = new TreeSet<Word>();
String key;
String value;
//loop through all properties
Word word = new Word(key);
Word synonym = new Word(value);
if (allWords.contains(word)) {
allWords.tailSet(word).first().addSynonym(synonym); //find the word in the set
} else {
word.addSynonym(synonym);
allWords.add(word);
}
Run Code Online (Sandbox Code Playgroud)
需要一些改进,如何存储单词有一个问题,每个单词应该存储在allWords中,还是只存储一组同义词?使用某种 TreeMap 可能会更好,例如
final TreeMap<Word, List<Word>> allWords;
Run Code Online (Sandbox Code Playgroud)
但仍然可能会帮助你朝正确的方向前进..无论如何,只是从我的头顶开始..
归档时间: |
|
查看次数: |
2341 次 |
最近记录: |