在javascript中,对照英语词典检查字符串变量中的项
in javascript checking items in a string variable against an English dictionary
我有下面的函数,它从所有英文字母的数组中随机选择字母(加上空格,加上<br/>
),并将它们存储在字符串变量中。
该函数有一个循环,可生成2500个随机字符。我想检查两个空格(即"或一个空格和一个回车("或<br/>
)或两个<br/>
之间的字母序列中的哪一个构成合法的英语单词。
我该怎么做?特别是
- 我需要下载一本英语词典吗
- 如何将我所有的字符串与它进行比较
- 保留合法的词语?这是功能
JS
function statement() {
var letters = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", " ", "<br/>"];
for (var i = 0; i <= 2500; i++) {
var random_letter = Math.floor(Math.random() * letters.length);
result += letters[random_letter];
}
document.getElementById("random1").innerHTML += result;
}
首先:您需要一个单词列表。如果你使用Unix操作系统,你很可能在/usr/share/dict/words
中有一个中等大小的单词列表,但你会在网上找到很多,一个简短的搜索给出http://www-01.sil.org/linguistics/wordlists/english/wordlist/wordsEn.txt大约有10万字。这些已经排序了,所以你可以把它们一个字一个字地放在Array
中。因为它是排序的,所以你可以用快速的二进制搜索来搜索它。
你在空格和换行符之间寻找单词,但如果例如word<br/>word2 word3<br/>
算作word, word2, word3
或word, word2 word3
,这有点模糊,所以word2 word3
会是一种句子吗?我假设第一种变体:为了简单起见,从现在起,只有一个单词,没有句子。
在生成字符串的循环中,如果每个生成的字符都是空格/换行符,我会检查到目前为止生成的字符串,并根据字典进行检查。
如果你坚持只处理最终生成的字符串,你必须将其拆分为单个单词,也许可以使用regex,因为这里很简单:
var s = ("word1 word2<br/> <br/><br/> word3 <br/>").replace(/<br[/]>/g,"").split(/['s]+/);
s.join(",");
//word1,word2,word3,
// the ^ last one is empty
然后循环遍历数组,并对照字典检查您找到的每个单词。因为我糟糕的拆分版本中的最后一个条目是空的,其他条目也可能是空的(如果你玩它的话),你需要检查每个条目中是否有东西。
您可以通过(ab)使用{key:value}
对象,将麻烦留给JavaScript引擎,而不是使用简单的数组和二进制搜索来进行字典搜索。(这个例子是从已经排序的单词列表中排序的,因为C&P,它不需要排序)
dict = {Banach:0,Bancroft:0,Bandung:0,"Banga lore":0,Bangkok:0,Bangladesh:0,
Bangladeshi:0,Bangor:0,Bangui:0,Banjarmasin:0,Banjul:0,Banks:0,
Banneker:0,Deleon:0,Delgado:0,Delhi:0,Delia:0,Delibes:0,Delicious:0,
Delilah:0,Delius:0,Dell:0,Dell:0,Della:0,Delmar:0,Delmarva:0,Delmer:0,
Delmonico:0,Delores:0,Deloris:0,Hanukkahs:0,Hapsburg:0,Harare:0,
Harbin:0,Hardin:0,Harding:0,Hardy:0,Hargreaves:0,Harlan:0,Harlem:0,
Harlequin:0,Harley:0,Harlow:0,Harmon:0};
dict.hasOwnProperty("Delores"); // true
dict.hasOwnProperty("foo"); // false
您在此处使用键作为值。实际值在这种情况下被浪费了,但你可以使用它们进行进一步的细化,例如:标记名词、动词、形容词等。你不局限于数字,当然,你可以使用所有东西,甚至是该词的完整字典条目(甚至有图片和音乐,但那是另一回事)。
这是使用节点js实现的工作代码
1) 是的,你必须下载单词,我使用请求模块从url中获取它们。
基本上,您必须将该网站的单词列表用regalr表达式拆分为一个数组,还必须用另一个正则表达式拆分随机生成的字符串。然后,你做一个for循环,一次一个地遍历它们中的每一个,将每个真实单词与每个生成的单词进行比较。像这样:
var request = require("request");
request("http://www.math.sjsu.edu/~foster/dictionary.txt", function(err,status, resp){
var letters = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", " ", "<br/>"];
letters = letters.map(function(letter){ return letter.toLowerCase()});
//console.log(wordsArr);
var result = "";
var c = 0;
for (var i = 0; i <= 10000; i++) {
var random_letter = Math.floor(Math.random() * letters.length);
result += letters[random_letter];
c++;
}
if(c >= 2500){
var randomResultArr = result.split(/<br'/>|<br'/><br'/>|'s/);
console.log(randomResultArr);
var matchesArr = getWordMatches(wordsArr = resp.split("'n"), result.split(/<br'/>|<br'/><br'/>|'s/));
console.log("MATCHES: " + matchesArr);
}
});
function getWordMatches(wordsArr, resultArr){
var matchesArr = [];
console.log("WORDSARR ", wordsArr.length);
console.log("RES ARR ", resultArr.length);
for(var i = 0; i < wordsArr.length; i++ ){
for(var x = 0; x < resultArr.length; x++){
if( (wordsArr[i] === resultArr[x]) && wordsArr[i] !== "" ){
matchesArr.push(wordsArr[i]);
console.log("WORD MATCH : " + wordsArr[i]);
}
}
}
return matchesArr;
}
这是它的一个样本输出,我不得不将2500增加到10000才能获得更多的匹配:
WORDSARR 349901
RES ARR 747
WORD MATCH : giros
WORD MATCH : goad
WORD MATCH : kaqa
WORD MATCH : lome
WORD MATCH : mibs
MATCHES: giros,goad,kaqa,lome,mibs
- 如何检查字符串的一部分与数组匹配
- 三元运算符检查多个字符串
- 检查数组中是否存在字符串值,并返回找到的数组值js
- 如何检查一个字符串的所有字符是否都存在于另一个字符串中
- Regex模式,用于检查字符串中每个单词的第一个字母(如果是Javascript中的大写字母)
- 检查变量是否为字符串的简单方法
- 如何检查两个字符串是否具有相同的字符,包括特殊字符
- 将数据作为字符串从C#发送到Javascript-如何检查字符串
- 使用JQuery检查数组的索引中是否存在字符串
- 需要javascript正则表达式来检查以U或C开头、长度为10的字符串
- JavaScript 字符串字母和数字检查
- jQuery检查字符串前面是否有其他字母
- 如何检查数据表是否有任何包含字符串的行并获取它的行索引
- 如何在 AngularJS 中检查字符串是否为空
- 简单的PHP字符串检查不起作用
- 如何根据字符串检查ajax响应
- Javascript 子字符串检查
- 快速字符串检查查找字符串中的重复项
- 简单的JavaScript空字符串检查,(空字符串)是什么意思,为什么失败
- 无法使用字符串检查相等的数字