我正在制作一个词典应用程序。我正在使用Pearson Dictionary API
。我需要生成一个单词,以便我可以查询该单词的定义。
问题
我知道如何生成随机词,但我不知道如何生成有意义的英文单词。
我尝试通过请求JSON响应并检查响应中的results[]
(结果[]保留该词的定义)来解决此问题。因此,如果results[].lenght > 0
,则该单词是有效的英语单词。
但上面的解决方案有其自身的严重问题:假设我想要生成一个5个字母的单词,有多个26^5 = 11881376
个不同的组合,而没有那么多5个信有意义的英文单词。随着单词中的字母增加,组合的数量也会增加。因此,生成有意义的单词可能需要很长时间。
如何检查生成的单词是否是有意义的英语单词?是否有任何可行的程序化方法?
或者还有其他方法可以解决这个问题吗?
答案 0 :(得分:2)
据我所知,你要么生成随机的字母串,要检查他们是否有单词(正如你所知,这是非常缓慢的,命中或错过的方法)或者你存储的是"已知商品清单"单词并从该列表中随机选择。
该列表需要多大取决于您尝试实现的目标。
根据this page,OED有大约171,476个主要条目,不包括复数( cat , cats )等变体,标准变体(坐,坐着),也没有多个类的单词(例如 dog 可以是名词[动物]或动词[持续跟随]等) 。根据{{3}},一般成年人知道20,000到35,000个单词,因此谨慎选择50,000个单词应涵盖大多数通用用途。
this page(现已关闭)的答案为单词列表提供了许多来源。检查其中一个(最初由infochimps.org提供但作为this question提供)表明350,000+字的平均长度不到10个字符。对于Linux(以及可能的其他风格),/usr/share/dict/words
可能是一个有用的起点。
答案 1 :(得分:1)
这个漂亮的文本文件包含所有英文单词:
https://github.com/AlexHakman/Java-challenge/blob/master/words.txt
然后,您可以根据此文本文档中的内容生成5个字母的单词:)
获取每行的长度,或者只生成并与文本文件进行比较:)
答案 2 :(得分:0)
我希望我理解你的问题:
如果您需要随机英语单词,那么您可以使用API。请看以下链接:
http://www.setgetgo.com/randomword/get.php
请求会为您提供一个随机的英文单词作为回复。
如果您想要特定长度,则可以使用此链接:
答案 3 :(得分:0)
而不是随意做,因为你需要花时间验证只需存储你需要的单词的字典并为其设置查找表。
一个相对完整的英语词典大约2MB被压缩,就像这里的http://wordlist.aspell.net/12dicts/
一样即使对于Android应用,除非您的目标确实位于有源设备下,否则它应该不会那么大。
您可以使用SQLite存储数据,这样可能会占用更多的存储空间,但您可以使用SQL作为查询语言,而不是自己编写。
由于您还需要一些随机性,每行可以添加某种随机密钥,您可以进一步查询。
如果您真的想将其限制为5个字符,那么只需使用字典的子集即可。但是这将允许你有一个任意长度的偶数长度范围(例如2到10个字符)