0

我编写了一个或多或少像文字游戏的小应用程序。需要验证用户可能创建的单词以检查它是否是有效的英文单词。我已经想到了一些实现这一点的方法—— 1)有一个哈希图,每个英文单词作为键,布尔值作为值。这样我可以在用户验证时搜索密钥等等。2) 向dictionary.com 等网站发送HTTP 请求,以验证该单词是否存在。

尽管在我看来 HTTP 请求是实现此功能的好方法,但我希望先填充一个哈希图,然后定期从源(例如 dictionary.com)更新哈希图,这样我就可以避免所涉及的延迟在 HTTP 请求实现中。

任何关于我如何用源代码填充哈希图的指针将不胜感激。

谢谢 p1nG

4

5 回答 5

1

您可以使用 Web 服务和 Big Huge Thesaurus。它是一个 REST Web 服务,因此您可能需要 Jersey 或 RestEasy 等工具。

另一种选择是 Oanaware 及其 SOAP Web 服务。


资源 :

在同一主题上:

于 2010-08-29T13:14:29.877 回答
0

我认为检查一个单词的哈希是不够的。两个单词可能具有相同的哈希值。此外,字母的随机序列可以具有与正确单词相同的哈希值。考虑到这两点,我认为您将无法避免检查您的单词(在字典中查找)。

我不确定填满你的字典的最佳方法是什么。尝试查找免费的词典软件并检查他们的许可证对他们使用的数据的说明。我认为买这样的东西会更容易。

如果这不是一个选择,我认为在线处理不是一个坏选择。

于 2010-08-29T13:13:29.800 回答
0

下载单词列表怎么样。您可以使用 WordNet http://wordnet.princeton.edu/wordnet/列出 155,287 个单词的同义词等等。

或者谷歌搜索“英语单词列表”之类的第一页上有很多相关链接。

于 2010-08-29T13:13:33.657 回答
0

如果您只想检查字典中是否存在单词,为什么不使用 HashSet 呢?您可以使用每行一个单词的纯文本字典文件,或者至少这是我过去所做的。

不确定是否要更新它,但如果dictionary.com 提供了一个带有单词列表的文件,您可以下载该文件,然后打开该文件并将每个条目添加到您的哈希映射/集。假设不会删除任何单词,则只会覆盖现有条目。

编辑:刚刚写了一个测试程序,应该证明在检查你的单词时,hashmap 或 hash 集不会出现冲突。

import java.util.HashSet;

public class CollidingHash {
    String value;
    public CollidingHash(String s){
        value=s;
    }
    @Override 
    public int hashCode(){
        return 1;
    }
    @Override 
    public boolean equals(Object o){
        if(! (o instanceof CollidingHash)){
            return false;
        }
        CollidingHash c2 = (CollidingHash)o;
        return value.equals(c2.value);
    }
    public static void main(String[] args) {
        HashSet<CollidingHash> dict = new HashSet<CollidingHash>();
        CollidingHash a = new CollidingHash("This");
        CollidingHash b = new CollidingHash("That");
        dict.add(a);
        System.out.println("Is "+ (dict.contains(b)? "Bad": "OK"));
    }   
}

Edit2:添加了 Pace 提到的 equals 方法。

于 2010-08-29T13:14:00.160 回答
0

1)有一个哈希图,每个英语单词作为键,布尔值作为值。这样我可以在用户验证时搜索密钥等等。

AHashMap对于这项任务来说是多余的。你只需要知道一个词是否存在,所以你可以使用HashSet. 将所有单词添加到 后HashSet,您将使用该contains()方法检查是否存在单词HashSet。但是您必须知道这是一种区分大小写的方法,因此您必须确保所有单词的大小写相同(例如,“hello”与“Hello”不匹配)。

另外,我不知道将整个英语词典加载到内存中会占用多少内存。如果遇到问题,更好的方法可能是每次需要检查单词是否存在时扫描字典文件。

2) 向dictionary.com 等网站发送HTTP 请求,以验证该单词是否存在。

这也可以,但它依赖于 (1) 具有活动 Internet 连接的计算机和 (2) dictionary.com 网站正在运行。

于 2010-08-29T18:02:13.273 回答