Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问完整的java字典_Java_Dictionary - Fatal编程技术网

访问完整的java字典

访问完整的java字典,java,dictionary,Java,Dictionary,我正在编写一个玩单词链游戏的AI。如果你不知道那是什么,这里有一个: 因此,我希望通过能够访问整个词典并根据我的参数搜索单词,使我的人工智能变得更好。如何使用java通过eclipse访问整个词典?试试谷歌搜索“单词列表”。这里有一个很好的例子: 将其中一个保存为文件,并使用java将其加载到内存中。我会说得更具体一些,但根据你想如何搜索单词,你会以不同的方式将其加载到内存中。你想构建什么样的人工智能?它是学习代理吗? 根据我对“基于参数搜索单词”的理解,我想你的意思是你想把单词分为不同的类别,

我正在编写一个玩单词链游戏的AI。如果你不知道那是什么,这里有一个:

因此,我希望通过能够访问整个词典并根据我的参数搜索单词,使我的人工智能变得更好。如何使用java通过eclipse访问整个词典?

试试谷歌搜索“单词列表”。这里有一个很好的例子:


将其中一个保存为文件,并使用java将其加载到内存中。我会说得更具体一些,但根据你想如何搜索单词,你会以不同的方式将其加载到内存中。

你想构建什么样的人工智能?它是学习代理吗? 根据我对“基于参数搜索单词”的理解,我想你的意思是你想把单词分为不同的类别,这样你的AI就能生成一个可以解决的单词列表

要创建单词域,您可以将单词列表存储到hashmap中,并将“参数”作为键。既然您试图存储整个字典,为什么不将信息存储到非关系数据库(如果适用)中,这样您就不必在每次启动游戏时都准备AI

非关系数据库可以很容易地用Java实现。我知道一个很容易配置的是RIAK。您可以在此处查看说明和教程:。如果类似于用“关键字”搜索内容,则使用非关系数据库


希望这就是你要问的。

考虑到主要游戏规则是下一个单词应该以上一个单词的最后一个字母开头,你一定要预先准备好数据结构,然后在O(1)中访问它。因此,我建议使用字母表大小的数组(例如,英语为26),其元素是哈希集实例,表示以相应字母开头的单词包

HashSet<String>[] words;
HashSet[]字;
事实上,给定一个数组,您可以立即访问以该字母开头的单词集(位置0->A,位置1->B…)。除了数组之外,您还可以使用HashMap,它的键是字母,元素也是可能的单词的hashset

HashMap<Character, HashSet<String>> words;
HashMap词;
因此,在O(1)中仍然授予访问权

关于HashSet,您希望同时具有恒定的访问时间和恒定的删除时间,因为单词在游戏中不能重复,因此,在使用它们之后,您希望将它们从HashSet中删除

如果您的字典足够小(或者从另一个角度看,您有足够的资源),您可以完全预取字典。如果不这样做,建议的结构仍然是可适应的:事实上,数组(或HashMap)不会改变,而HashSet也提供恒定的添加时间。因此,您可以计划不时地重新填充哈希集(例如,在给定数量的删除操作之后)

在所有情况下,您都可以获得HashSet中的第一个元素或引入一些随机化;请记住,作为一般规则,对HashSet元素的访问不会以任何特定顺序进行

阅读单词的来源可以很容易地是一个文件,或者更好的是,一袋文件,每个字母一个,这样你总是知道在哪里阅读,你可以打开所有的文件,并减少打开、关闭或查找文件的开销:你打开和关闭每个文件一次,查找只是线性的

最后,如果您还希望只推荐属于给定类别的单词,那么您可能希望在字典预取期间过滤掉不属于该类别的单词(假设您拥有每个单词所属的类别)


如果您的问题还包括在运行时查找“相关”单词,那么您可能希望使用,这样您仍然可以在游戏期间有可接受的计算时间来计算相关性。

在这种情况下,我认为您需要与dict服务器通信以访问整个词典 这是我的密码

import java.net.*;
import java.io.*;
import java.util.*;

public class Dictionary {
public static void main(String[]args) {
    String host = "dict.org";
    try {
        Socket soc = new Socket(host,2628);
        OutputStream out = soc.getOutputStream();
        String request = "DEFINE ! yourwordhere";
        out.write(request.getBytes());
        out.flush();
        soc.shutdownOutput();
        InputStream in = soc.getInputStream();
        Scanner s = new Scanner(in);
        while(s.hasNextLine())
            System.out.println(s.nextLine());
        soc.close();
    } catch (UnknownHostException e) {
        System.out.println("Cannot found the host at "+host);
    } catch (IOException e) {
        e.printStackTrace();
    } 
}
}
如果是这样的话,你就不必做任何搜索,这会减少整个字典执行程序的时间?现在还不清楚问题出在哪里。有很多方法可以存储和访问单词列表。什么样的搜索参数?根据要搜索的内容,可能需要使用不同的数据结构。