在javascript中,根据英语词典检查字符串变量中的项
我有下面的函数,它从所有英文字母的数组中随机选择字母(加空格,加在javascript中,根据英语词典检查字符串变量中的项,javascript,Javascript,我有下面的函数,它从所有英文字母的数组中随机选择字母(加空格,加),并将它们存储在字符串变量中 该函数有一个生成2500个随机字符的循环。我想检查两个空格之间的字母序列(即“或空格和回车符”(“或)或两个构成合法的英语单词) 我该怎么做?特别是 我需要下载英语词典吗 如何将所有字符串与它进行比较 保留合法的词语?以下是 功能 JS function statement() { var letters = ["A", "B", "C", "D", "E", "F", "G", "H", "
),并将它们存储在字符串变量中
该函数有一个生成2500个随机字符的循环。我想检查两个空格之间的字母序列(即“或空格和回车符”(“或
)或两个
构成合法的英语单词)
我该怎么做?特别是
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;
}
function语句(){
变量字母=[“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”、“X”、“B”、“X”、“X”、“X”、“X”、“X”等];
对于(var i=0;i首先:你需要一个单词列表。如果你使用Unix操作系统,你很可能在/usr/share/dict/words
中有一个中等大小的单词列表,但是你会在网上找到很多,一个简短的搜索给出了大约10万个单词。这些单词已经被排序,所以你可以将它们逐字放入数组中。因为它是排序的您可以使用快速二进制搜索进行搜索
你在空格和换行符之间寻找单词,但是如果word
word2 word3
算作word,word2,word3
或word,word2 word3
那么word2 word3
将是一种句子,这就有点含糊不清了。我假设第一种变体:单字,为了简单起见,从现在开始就没有句子
在生成字符串的循环中,我将检查每个生成的字符是否为空格/换行符,获取迄今为止生成的字符串并对照字典进行检查
如果您坚持只处理最终生成的字符串,则必须将其拆分为单个单词,可能需要使用正则表达式,因为这里很简单:
var s = ("word1 word2<br/> <br/><br/> word3 <br/>").replace(/<br[/]>/g,"").split(/[\s]+/);
s.join(",");
//word1,word2,word3,
// the ^ last one is empty
这里使用键作为值。实际值在本例中是浪费的,但您可以使用它们进一步细化,例如:标记名词、动词、形容词等。您不限于数字,当然,您可以使用所有内容,甚至可以使用该词的完整词典条目(甚至包括图片和音乐,但这是另一个故事).这是使用node js实现的工作代码
1) 是的,你必须下载单词,我使用请求模块从url获取它们
基本上,您必须使用正则表达式将该网站中的单词列表拆分为一个数组,并使用另一个正则表达式将随机生成的字符串拆分。然后,您执行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;
}
对不起,我放了“
”在我的评论中,它似乎创造了硬回报。因此,我再次提出了我的问题:谢谢,这真的很棒。从我在你的代码中看到的,我实际上不必下载英文数据库。我可以直接将程序转到他们的服务器并检查我的随机字符串,对吗?是的,如果你愿意,你可以通过http请求下载数据导航到代码中的URL,你看到的就是下载的内容,它下载它并将其存储为变量,而实际上它不会将其保存到文件或任何东西中。请求完成后,可以根据随机字符串检查它Hank you deamentiaemundi
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;
}
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