在大文本中查找特殊词
Find special words in big text
I MAKE : 我想在大文本中找到来自编程领域(HTML、JavaScript、后端...)的特殊词(1000+ 个单词)并将我找到的所有编程单词放入新数组
问题: 在我看来,只有一种方法可以做到这一点。
- 写非常大的数组和编程字
- 编写一个循环,将 BIG TEXT 中的每个单词与 BIG ARRAY 中的单词(带有编程单词)进行比较
但我认为有一些解决方案可以大大简化任务。
知道如何让这个 MORE 更简单吗?
我写在服务器上JavaScript
编辑: 我知道 indexOf 等的人。谢谢,但我想找到
- 算法非常快
- 如何避免写编程字(500+)
"SOLVED :" 我找到了 underscore.js
示例:
var tagsObject = {
"Java":"JAVA",
"J2EE":"J2EE"
}
var words = "Java is a big language ! ! "
var words = content.split(/\b/); // make array
words = _.uniq(words); // make array with uniq words
console.log( _.intersection(words,_.keys(tagsObject))); // Computes the list of values that are the intersection of all the arrays, return array
//_.keys(tagsObject) - return array with keys
您可以尝试使用正则表达式。此搜索以查看 HTML
、JavaScript
或 Back-end
是否在字符串
中
var passingWords = "HTML,blah,otherWordsHere,JavaScript,Back-end";
var failingWords = "blah, otherWordsHere, h.tml, H.TML";
var re = new RegExp('(HTML)|(JavaScript)|(Back-end)');
console.log(re.test(passingWords));
console.log(re.test(failingWords));
如果 new
声明中给出的任何单词在给定的字符串中,它将 return true
,如果不在,则 false
。
在您的情况下,您可能希望单独测试每个单词或编写不同的正则表达式,允许单词与每个定义单词之间的任何字符的任意组合。
这只会告诉你这个词是否在那里,而不是它在哪里或任何其他信息。
我想到了很多 fast string searching algorithms,尤其是 Rabin-Karp。
可以在 this gist 中找到实现,您还可以在其中比较不同函数之间的 运行 次:
function simpleSearch(text, str) {
...
function searchRabinKarp(text, str) {
...
标准方法(regex
和 indexOf
)的性能已经在 this post.
中进行了比较
嗯..实际上我想推荐你的是对你的数组使用一个名为 indexOf 的 JS 函数。
通过这种方式,您至少可以删除一个循环。如果上面的JS func的return值为-1那么就是没有找到具体的字符。
Var sourceArray=[a,b,c,d,e];
Var toBeFoundValues=[a,x,z,d];
For(var i=0;i<toBeFoundValues.length;I++)
If(sourceArray.indexOf(toBeFoundValues[I])!=-1)
// logic here
希望以上代码对您有所帮助。
抱歉,如果代码看起来不像我通过我的智能 phone!
回答的那样漂亮
I MAKE : 我想在大文本中找到来自编程领域(HTML、JavaScript、后端...)的特殊词(1000+ 个单词)并将我找到的所有编程单词放入新数组
问题: 在我看来,只有一种方法可以做到这一点。
- 写非常大的数组和编程字
- 编写一个循环,将 BIG TEXT 中的每个单词与 BIG ARRAY 中的单词(带有编程单词)进行比较
但我认为有一些解决方案可以大大简化任务。
知道如何让这个 MORE 更简单吗?
我写在服务器上JavaScript
编辑: 我知道 indexOf 等的人。谢谢,但我想找到
- 算法非常快
- 如何避免写编程字(500+)
"SOLVED :" 我找到了 underscore.js 示例:
var tagsObject = {
"Java":"JAVA",
"J2EE":"J2EE"
}
var words = "Java is a big language ! ! "
var words = content.split(/\b/); // make array
words = _.uniq(words); // make array with uniq words
console.log( _.intersection(words,_.keys(tagsObject))); // Computes the list of values that are the intersection of all the arrays, return array
//_.keys(tagsObject) - return array with keys
您可以尝试使用正则表达式。此搜索以查看 HTML
、JavaScript
或 Back-end
是否在字符串
var passingWords = "HTML,blah,otherWordsHere,JavaScript,Back-end";
var failingWords = "blah, otherWordsHere, h.tml, H.TML";
var re = new RegExp('(HTML)|(JavaScript)|(Back-end)');
console.log(re.test(passingWords));
console.log(re.test(failingWords));
如果 new
声明中给出的任何单词在给定的字符串中,它将 return true
,如果不在,则 false
。
在您的情况下,您可能希望单独测试每个单词或编写不同的正则表达式,允许单词与每个定义单词之间的任何字符的任意组合。
这只会告诉你这个词是否在那里,而不是它在哪里或任何其他信息。
我想到了很多 fast string searching algorithms,尤其是 Rabin-Karp。
可以在 this gist 中找到实现,您还可以在其中比较不同函数之间的 运行 次:
function simpleSearch(text, str) {
...
function searchRabinKarp(text, str) {
...
标准方法(regex
和 indexOf
)的性能已经在 this post.
嗯..实际上我想推荐你的是对你的数组使用一个名为 indexOf 的 JS 函数。 通过这种方式,您至少可以删除一个循环。如果上面的JS func的return值为-1那么就是没有找到具体的字符。
Var sourceArray=[a,b,c,d,e];
Var toBeFoundValues=[a,x,z,d];
For(var i=0;i<toBeFoundValues.length;I++)
If(sourceArray.indexOf(toBeFoundValues[I])!=-1)
// logic here
希望以上代码对您有所帮助。 抱歉,如果代码看起来不像我通过我的智能 phone!
回答的那样漂亮