-
2021-01-29 10:12:08
运维工程师在日常工作中,一般可以通过日志管理系统,定时检查网络和安全各类相关系统的日志文件。然而一旦出现故障,我们会被要求检查海量的日志文件,进而定位事件发生经过。
此时,首先通过关键词自动匹配日志,再检查匹配到的日志的方式可以减少一定工作量。
批处理方式进行关键词分类文件
在Windows操作系统上,批处理程序不需要安装任何脚本,不需要通过命令等调用,直接双击就可自动处理,非常方便。
搜集关键字,并写入文本文件
# 新建关键字.txt,并写入error和shutdown
@echo off
echo error >> 关键字.txt
echo shutdown >>关键字.txt
逐个文件对比,是否存在关键字,并列出
for /f "tokens=1,1-2 delims= " %%i in (20190818.log) do (
for /f "tokens=1,1-2 delimw= " %%j in (关键词.txt) do (
if %%i == %%j echo(%%m %%j>>result.txt))
)
然而可以看出,批处理在字符串的操作上很不便利,导致匹配不精确,需要手动操作的情况时有发生,Python脚本可以有效解决这些问题。
Python方式进行关键词匹配日志文件
遍历日志文件
# 返回日志文件列表
def allPath(dirname):
result = []#所有的文件
for maindir, subdir, file_name_list in os.walk(dirname):
print("1:",maindir) #当前主目录
print("2:",subdir) #当前主目录下的所有目录
print("3:",file_name_list) #当前主目录下的所有文件
for filename in file_name_list:
apath = os.path.join(maindir, filename)#合并成一个完整路径
result.append(apath)
return result
读入关键词
# 把关键词写入列表
def wrKeywords(*keywords):
keywordsList = []# 所有的关键词
for str in keywords:
li = str + '\n'
keywordsList.append(li)
return keywordsList
按关键词分类日志
def classLog(logName, keywordsList):
fi = [] # 匹配到的文件列表
for name in logName:
with open(name, 'r', encoding='utf-8') as f:
t = f.read() # 读取文件
for key in keywordsList:
if key in t:
fi.append(name)
continue
return fi
运行主程序
if __name__ == '__main__': # 顶层功能的引用放在__name__后
import os
keywordsList = wrKeywords('error','shutdown')
filenameList = allPath('\')
fi = classLog(filenameList, keywordsList)
print('匹配到的文件有:')
for str in fi:
print(str)
更多相关内容 -
1秒50万字!js实现关键词匹配
2020-11-27 07:29:58但对于关键词较多的情况下,多次重复调用indexOf、正则的话去匹配全文的话,性能消耗非常大。由于目标字符串通常来说体积都比较大,所以必须要保证一次遍历就得到结果。根据这样的需求,很容易就想到对全文每个字符... -
python通过BF算法实现关键词匹配的方法
2021-01-20 05:24:38本文实例讲述了python通过BF算法实现关键词匹配的方法。分享给大家供大家参考。具体实现方法如下: 复制代码 代码如下:#!/usr/bin/python # -*- coding: UTF-8 # filename BF import time “”” t=”this is a big ... -
仿百度的关键词匹配搜索示例
2020-12-12 10:42:48关键词匹配搜索仿百度</title> <meta name=”description” content=” 内容介绍不超过100个中文”> <meta name=”keywords” content=” 内容相关关键词3-5个”> <style> body, ul, li { ... -
关键词匹配模式
2021-03-13 00:13:30网民搜索时,系统会自动挑选对应关键词,将推广结果展现给网民,企业可以通过搜索匹配方式,来决定网民搜索词与关键词的对应关系。匹配模式的定义 又叫关键词匹配方式
网民搜索时,系统会自动挑选对应关键词,将推广结果展现给网民,企业可以通过搜索匹配方式,来决定网民搜索词与关键词的对应关系。
匹配模式的分类:
精确匹配、短语匹配、智能匹配-核心词、智能匹配。
精确匹配:广告主提交的关键词及关键词的同义变体,会与用户的搜索保持整体精确一致,来帮助广告主精确竞争目标流量。
字面相同的情况下,搜索词中有空格也能精确匹配不带空格的关键词
短语匹配:广告主提交的关键词或关键词的同义变体,会被包含在用户搜索词中,或是在意思一致的前提下,于搜索词的前中后插入或变换顺序,如系统识别出关键词的类目能包含搜索词,也能获得展现机会。
智能匹配-核心词:系统将会自动圈定该关键词中的核心词语。您也可手动圈定核心词,需在新建关键词时,在所需圈定的核心词两侧添加大括号后直接添加,
智能匹配:使用智能匹配模式,当广告主提交关键词,会被系统智能理解并匹配出搜索意图相关的用户搜索词,帮助广告主触达大量的潜在客户。
否定关键词
分为短语否定关键词和精确否定关键词两种,
匹配模式的定义 又叫关键词匹配方式
网民搜索时,系统会自动挑选对应关键词,将推广结果展现给网民,企业可以通过搜索匹配方式,来决定网民搜索词与关键词的对应关系。
匹配模式的分类:
精确匹配、短语匹配、智能匹配-核心词、智能匹配。
精确匹配:
广告主提交的关键词及关键词的同义变体,会与用户的搜索保持整体精确一致,来帮助广告主精确竞争目标流量。
字面相同的情况下,搜索词中有空格也能精确匹配不带空格的关键词
以关键词“英语培训”为例,在精确匹配下:
1.能触发推广结果的搜索词:英语培训、培训英语、英文培训。
2.不能触发推广结果的搜索词包括:包含关键词的搜索词:例如暑期英语培训、北京英语培训。网民的搜索习惯千差万别,在表达对同一种产品/业务的需求时,他们可能使用的搜索词是多种多样的。2020年升级的精确匹配,广告主不再需要一一罗列网民可能使用的搜索词,作为关键词提交到系统中来,从而避免因为罗列不完全,而大大降低获取潜在客户的机会当您设置的关键词中,包含地域词时,位于该地域(按IP地址来判断)的网民搜索除去地域词以外的部分,也可能展现您的推广结果。例如您设置了关键词“上海光伏电缆”(精确匹配),位于上海的网民在搜索“光伏电缆”时也可能会看到您的推广结果,位于上海以外的其他地区网民搜索“光伏电缆”则不会展现您的推广结果。
短语匹配:
广告主提交的关键词或关键词的同义变体,会被包含在用户搜索词中,或是在意思一致的前提下,于搜索词的前中后插入或变换顺序,如系统识别出关键词的类目能包含搜索词,也能获得展现机会。
智能匹配-核心词:
系统将会自动圈定该关键词中的核心词语。您也可手动圈定核心词,需在新建关键词时,在所需圈定的核心词两侧添加大括号后直接添加,
智能匹配:
使用智能匹配模式,当广告主提交关键词,会被系统智能理解并匹配出搜索意图相关的用户搜索词,帮助广告主触达大量的潜在客户。
否定关键词
分为短语否定关键词和精确否定关键词两种,
星级客户 否定关键词数 、精确否定关键词 IP屏蔽数 未生效客户 200个 200个 200个 一星权益客户 200个 400个 300个 二星权益客户 400个 700个 300个 三星权益客户 500个 900个 300个
1.目前搜索推广系统提供否词量包含200个短语否和200个精确否。相对对大账户而言,这个数值可能是不够的。所以否定关键词的设置,很重要的一点就是合并同类 项的能力,而不是看到不相关的关键词精确否定掉了事,还得有预见性。以合适的方式否定掉将来可能出现的其他不相关搜索词。预见性很重要,筛选出来无效关键词后,要进行分析。每个无效关键词背后可能是一类无效人群。一定要分析无效词产生的原因,可以借助关键词工具去拓展相关无效词,要有关键词敏感度。2.优先考虑短语否定,再考虑精确否定。这个顺序很重要。能短语否定的尽量短语,因为精确只能否定一个词。当然,有些词只能精确否定(点击高的单名词),关键词匹配方式也很重要而且两者需要相互配合。
3.否定关键词列表也需要不断去补充、完善、合并及优化的,定期查看搜索词报告,即时监控无效流量,除了每天的查看之外,还可以按周、按月、甚至按业务周期查看。这样对某个时间段的无效关键词流量有一个全局的观念。
4.作为SEMer平时整理一份自身行业常用的否定词,在新建计划的同时就可以直接添加进去。例如招聘的“聘”、“招工”、“案例”、“模板”、“素材”、“图片”、“视频”等等这些对于多数行业都是通用的否定词。
冷门否定关键词:指的是那些至少90天内没被网民搜索过的否定关键词,这些否定关键词虽然存在于账户中,但实际上近期并没有网民搜索过,所以没必要再将其设置为否定关键词,占用否词额度。
否定关键词的使用技巧
注意:
选择否定词的步骤
优先考虑单字否定词,随后考虑多字否定词
否定词优先级
关键词匹配模式整体策略
避免账户结构混乱:假设账户由100个词组成,其中20个词为核心关键词,80词为普通长尾词。
避免搜索词匹配混乱
核心词计划做短语匹配时,会出现以高价关键词匹配低价搜索词的现象
1.目前搜索推广系统提供否词量包含200个短语否和200个精确否。相对对大账户而言,这个数值可能是不够的。所以否定关键词的设置,很重要的一点就是合并同类 项的能力,而不是看到不相关的关键词精确否定掉了事,还得有预见性。以合适的方式否定掉将来可能出现的其他不相关搜索词。预见性很重要,筛选出来无效关键词后,要进行分析。每个无效关键词背后可能是一类无效人群。一定要分析无效词产生的原因,可以借助关键词工具去拓展相关无效词,要有关键词敏感度。2.优先考虑短语否定,再考虑精确否定。这个顺序很重要。能短语否定的尽量短语,因为精确只能否定一个词。当然,有些词只能精确否定(点击高的单名词),关键词匹配方式也很重要而且两者需要相互配合。
3.否定关键词列表也需要不断去补充、完善、合并及优化的,定期查看搜索词报告,即时监控无效流量,除了每天的查看之外,还可以按周、按月、甚至按业务周期查看。这样对某个时间段的无效关键词流量有一个全局的观念。
4.作为SEMer平时整理一份自身行业常用的否定词,在新建计划的同时就可以直接添加进去。例如招聘的“聘”、“招工”、“案例”、“模板”、“素材”、“图片”、“视频”等等这些对于多数行业都是通用的否定词。
冷门否定关键词:指的是那些至少90天内没被网民搜索过的否定关键词,这些否定关键词虽然存在于账户中,但实际上近期并没有网民搜索过,所以没必要再将其设置为否定关键词,占用否词额度。
否定关键词的使用技巧
注意:
选择否定词的步骤
优先考虑单字否定词,随后考虑多字否定词
否定词优先级
关键词匹配模式整体策略
避免账户结构混乱:假设账户由100个词组成,其中20个词为核心关键词,80词为普通长尾词。
避免搜索词匹配混乱
核心词计划做短语匹配时,会出现以高价关键词匹配低价搜索词的现象
-
关键词匹配度教你发布文章才会有流量
2020-09-30 23:01:39提高引擎有效收录,其中最主要的办法就是提高“关键词匹配度”。 所谓关键词就是人们使用引擎找信息的时候输入到搜索框里的文字。比如“站友网”就是关键词,另外“中国站友网”“站友网 地址” 等等都是关键词,这... -
简单关键词匹配算法
2021-02-25 19:34:39针对微博的短篇博文,编写的简单分词和匹配算法。相对于一篇文档的复杂分词算法,能够在效率和可用性上得到较好的平衡。package com.sina.tblog.sentiment;import java.io.BufferedReader;import java.io.File;...针对微博的短篇博文,编写的简单分词和匹配算法。相对于一篇文档的复杂分词算法,能够在效率和可用性上得到较好的平衡。
package com.sina.tblog.sentiment;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.regex.Pattern;
import com.sina.tblog.sentiment.constant.Constant;
public class KeyWordFilter {
public static HashSet KeyWordsList = null;
public static HashSet letterKeyWordsList = null;
/**
* 初始化或重新导入关键词列表
* @throws IOException
*/
static{
try {
initKeyWords(Constant.KeyWordsFiles);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static int deleteNewWord(String word){
if(word.length()>10||word.length()<2)
return -1;
if(!KeyWordsList.contains(word))
return 0;
KeyWordsList.remove(word);
if(Pattern.compile("(?i)[a-z][A-Z]").matcher(word).find())
letterKeyWordsList.remove(word.toUpperCase());
FileOutputStream stream;
OutputStreamWriter writer;
try {
stream = new FileOutputStream(Constant.newWordsFile,true);
writer = new OutputStreamWriter(stream);
writer.write("\n"+word);
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return -1;
}
return 1;
}
public static int addWord(String word){
if(word.length()>10)
return -1;
if(KeyWordsList.contains(word))
return 0;
KeyWordsList.add(word);
if(Pattern.compile("(?i)[a-z][A-Z]").matcher(word).find())
letterKeyWordsList.add(word.toUpperCase());
FileOutputStream stream;
OutputStreamWriter writer;
try {
stream = new FileOutputStream(Constant.newWordsFile,true);
writer = new OutputStreamWriter(stream);
writer.write("\n"+word);
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return -1;
}
return 1;
}
private static void initKeyWords(String Files[]) throws IOException {
if(KeyWordsList!=null)
KeyWordsList.clear();
else
KeyWordsList = new HashSet();
if(letterKeyWordsList!=null)
letterKeyWordsList.clear();
else
letterKeyWordsList = new HashSet();
for(int i=0;i
File file = new File(Files[i]);
BufferedReader reader = null;
reader = new BufferedReader(new FileReader(file));
String tmp = reader.readLine();
while(tmp!=null){
KeyWordsList.add(tmp);
if(Pattern.compile("(?i)[a-z][A-Z]").matcher(tmp).find())
letterKeyWordsList.add(tmp.toUpperCase());
tmp = reader.readLine();
}
reader.close();
}
}
private static boolean findWord(String str,boolean ignoreCase){
if(ignoreCase == false)
return KeyWordsList.contains(str);
else{
boolean match = KeyWordsList.contains(str);
if(match == false){
match = letterKeyWordsList.contains(str.toUpperCase());
}
return match;
}
}
public static List segmentStrQuickMatch( String str_line,boolean ignoreCase)
{
String term = "";
boolean term_tag = false;
int str_size=0,left=0,len=0;
List list = new ArrayList();
str_size = str_line.length();
while(left
{
len = Constant.max_len;
while( len>=Constant.min_len )//gkm:每一词
{
term="";
int right = left+len;
int x = 0;
if(right>str_size){
x = right-str_size;
right = str_size;
}
term=str_line.substring(left,right);
term_tag=findWord(term,ignoreCase);
if(term_tag==true)
break;
if(x>0)
len-=x+1;
else
len-=1;
}
if(term_tag==false)//gkm:词典中没有term,后移一个字符(以一个字符的速度后移,使得可以分出中英混合的词,没有判断无效字符,有待改进!!! )
{
left+=1;
}
else//gkm:词典中有term,后移len个字符,term加入到terms_vct[term_tag]
{
left+=len;
list.add(term);
}
}//while(left
return list;
}
public static List segmentStrFullMatch( String str_line,boolean ignoreCase)
{
String term = "";
boolean term_tag = false;
int str_size=0,left=0,len=0;
List list = new ArrayList();
str_size = str_line.length();
while(left
{
len = Constant.max_len;
while( len>=Constant.min_len )//gkm:每一词
{
term="";
int right = left+len;
int x = 0;
if(right>str_size){
x = right-str_size;
right = str_size;
}
term=str_line.substring(left,right);
term_tag=findWord(term,ignoreCase);
if(term_tag==true)
list.add(term);
if(x>0)
len-=x+1;
else
len-=1;
}
left+=1;
}//while(left
return list;
}
public static void main(String[] args) throws IOException {
System.out.println(segmentStrFullMatch("中华人民共和国",true));
}
}
分享到:
2012-12-18 15:17
浏览 504
评论
-
关键词匹配——HashMap已死,Trie树称王
2021-11-14 14:48:52文章目录一、引言二、何为关键词匹配三、何为Trie树四、为什么不直接使用HashMap五、Trie树的代码实现1、Trie的初始化2、Trie添加字符串3、Trie查询字符串出现的频率4、Trie删除字符串六、总结 一、引言 上周在公司...你好,我是小黄,一名独角兽企业的Java开发工程师。
感谢茫茫人海中我们能够相遇,
俗话说:当你的才华和能力,不足以支撑你的梦想的时候,请静下心来学习,
希望优秀的你可以和我一起学习,一起努力,实现属于自己的梦想。文章目录
一、引言
上周在公司的周会上,谈到这样一件事,对于风控行业来说,关键词匹配是一个比较重要的业务之一,而关键字匹配的效率,也是众多风控者关注的重要指标。
如何使用一种既方便又快捷的方案进行关键字的匹配呢,风控常见做法是 Trie树 ,今天我们就来看一下关键词匹配界的霸主——Trie树(前缀树)。
二、何为关键词匹配
对于风控来说,每天处理的风控信息杂七杂八,其中比较重要的一个业务方向——关键字匹配
简单来说,如果用户输入傻逼、卧槽、我要炸学校…等一系列的违规词语,我们需要去我们的关键词表中进行匹配,最终返回结果:这是一个违规词语
这样看起来可能不够人性化,我们可以对其关键词表进行 打标签 的操作,将我们关键词表,打上涉政、涉黄、涉恐等一系列的标签。
这样,我们的整套流程看起来已经非常人性化了
三、何为Trie树
字典树,顾名思义,是关于“字典”的一棵树。即:它是对于字典的一种存储方式(所以是一种数据结构而不是算法)。这个词典中的每个“单词”就是从根节点出发一直到某一个目标节点的路径,路径中每条边的字母连起来就是一个单词。
- (标橙色的节点是“目标节点“,即根节点到这个目标节点的路径上的所有字母构成了一个单词。)
从这张图我们可以看出,字典树就是一棵树,只不过,这棵树的每条边上都有一个字母,然后这棵树的一些节点被指定成了标记节点(目标节点)而已。
这就是字典树的概念。结合上面说的概念,上图所示的字典树包括的单词分别为:
a
、abc
、bac
、bbc
、ca
Trie树功能如下:
- 维护字符串集合(即字典)
- 向字符串集合中插入字符串(即建树)
- 查询字符串集合中是否有某个字符串(即查询)
- 统计字符串在集合中出现的个数(即统计)
- 将字符串集合按字典序排序(即字典序排序)
- 求集合内两个字符串的LCP(Longest CommonPrefix,最长公共前缀)(即求最长公共前缀)
四、为什么不直接使用HashMap
首先,我们要明确我们的目的,为了业务去追寻相应的技术,才是最佳实现方式
我们要明确一点,对于 HashMap 来说,查询效率为 O(1) 的前提是:忽略单样本的大小
对于这一点,我们来看下面代码:
String类
// 计算字符串的hashCode public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; for (int i = 0; i < value.length; i++) { h = 31 * h + val[i]; } hash = h; } return h; }
HashMap类
public boolean containsKey(Object key) { return getNode(hash(key), key) != null; } static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); }
我们可以看到 当我们往HashMap存放一个字符串时,他会遍历整个字符串获取其
hashCode
这样的话,如果我们不忽略样本大小的话,那么我们的时间复杂度其实是:
O(K)
,K为字符串的大小如果我们当前查询该字符串出现的频率,我们从技术上使用
HashMap
和Trie树
区别是不大的,但是在我们的业务落地时,对于关键词那么大的数据,你使用HashMap
占据的空间岂不是造成浪费如果我想要查询以 “abc” 为前缀出现的字符串,我们的
HashMap
是不支持的,而trie树
就很好的支持了这一点总体而言,对于关键词的匹配,为了避免空间的浪费和业务的多元化,使用
trie树
的效率远大于HashMap
五、Trie树的代码实现
1、Trie的初始化
我们本文的
Trie树
代码假设所有出现的字符串均为小写字母- pass:通过该点的字符串数量
- end:结束该点的字符串数量
- tries:子树
class Trie { int pass; int end; Trie[] tries; public Trie() { pass = 0; end = 0; tries = new Trie[26]; } }
2、Trie添加字符串
public void insert(String word) { if (word == null) { return; } char[] str = word.toCharArray(); Trie trie = this; int path = 0; for (int i = 0; i < str.length; i++) { path = str[i] - 'a'; // 看一下子树是不是已经存在,如果不存在,则进行创建 if (trie.tries[path] == null) { trie.tries[path] = new Trie(); } trie.pass++; trie = trie.tries[path]; } trie.end++; }
3、Trie查询字符串出现的频率
/** * 该字符串出现了几次 * * @param word * @return */ public int search(String word) { if (word == null) { return 0; } char[] str = word.toCharArray(); Node node = root; int path = 0; for (int i = 0; i < str.length; i++) { path = str[i] - 'a'; if (node.nodes[path] == null) { return 0; } node = node.nodes[path]; } return node.end; }
4、Trie删除字符串
- Java选手直接置为
null
,GC即可回收,C++选手要手动回收
public void delete(String word) { if (search(word) == 0) { return; } char[] str = word.toCharArray(); Node node = root; int path = 0; for (int i = 0; i < str.length; i++) { path = str[i] - 'a'; if (--node.nodes[path].pass == 0) { // Java垃圾回收直接回收掉 node.nodes[path] = null; return; } node = node.nodes[path]; } node.end--; }
六、总结
关于
Trie树
的介绍到这就已经结束了,大家可以思考下HashMap
和Trie树
的差距,想一下哪个才是最优解,毕竟博主也有可能写错了呢(题主必不可能写错,逃)同时,对于
Trie树
的代码也需要多写几遍,博主写这篇博客的时候,又忘记了怎么写(逃对源代码有兴趣的小伙伴,可以关注
爱敲代码的小黄
公众号,回复:算法源码 即可获得算法源码本期的内容就到这里,下期 一定一定一定 会讲述 最小生成树(Prim、Kruskal) 算法。
我是一名独角兽企业的Java开发工程师,希望可以点个关注呀,有问题可以留言或者私信加我微信:hls1793929520,我们下期再见!
-
Python 文本匹配关键词,多个关键词从文本中匹配,疾病关键词匹配,.findall () .match() .search()的区别...
2022-04-21 14:44:20Python 文本匹配关键词,多个关键词从文本中匹配,疾病关键词匹配,.findall () .match() .search()的区别和应用实例,医学文本关键词检索 -
ansj分词、关键词匹配
2018-07-31 23:57:53springMVC+ansj中文分词+多线程+mybatis+redis+多库等等 -
多关键词匹配个人解决方案
2017-11-05 16:15:52本文章是对于多关键词匹配的两种个人解决方案的介绍,只是想记录一下自己的想法而已,不喜勿喷! ^_^ 最简单也是对于我们来说最方便的解决多关键词匹配的方法就是:从数据库中把关键词列表取出,然后对待检索文章... -
Mysql多关键词匹配最相关信息
2020-08-04 17:02:28一直在寻找Mysql多关键词匹配最相关信息最优解决方法,目前还没有找到,不过有以下两种思路,目测仅适用于较少数据的情况,希望有大神可以指导一下,如果大神有更好思路,特别是单表十万、百万级数据量的,希望... -
sem中四种关键词匹配模式.docx
2021-09-26 21:45:34sem中四种关键词匹配模式.docx -
Android使用正则表达式进行关键词匹配
2018-09-23 23:24:57日常开发中,我们可能会遇到进行关键词匹配的需求。举个例子,比如当我们使用科大讯飞的asr(语音识别)接口时候,会将用户说的话转成文本给予返回,然后通过tts(文本转语音)接口做出相应的回答。在拿到用户说的内容... -
17-4同义变换在关键词匹配广告中的角色.pdf
2022-03-18 14:25:4117-4同义变换在关键词匹配广告中的角色 -
关键词匹配方式。
2017-11-16 15:06:00百度竞价最主要的产品是关键词,针对的用户群体是企业,消费群体是消费者,展现的样式是广告...一、关键词匹配方式种类网民搜的词与选的关键词匹配在一起,相关时,也能展现广告创意。企业通过设置匹配方式,来决... -
js 多个关键词匹配标红如何实现
2017-07-18 09:05:37如题, 我直接上代码 var clikeyName = ($....当前我写的这个代码可以实现单个关键词匹配标红, 然后clikeyName 这个变量是处理过的可以获取长度,和每个下标下的内容, 但是多个关键词匹配的要怎么实现? 望大神赐教 -
flashtext实现高效的关键词匹配
2020-01-18 23:24:59最近的一个项目中需要从大量的文本数据中匹配上百万个关键词,为了提高效率,抛弃了正则表达式,使用了flashtext,真香,具体操作 参考了这篇博客 https://blog.csdn.net/sinat_26917383/article/details/78521871 ... -
loggrove:Loggrove是对本地、远程日志文件进行 分页阅读、实时阅读、关键词匹配、统计、监控、钉钉告警、...
2021-05-04 18:35:01Loggrove 是对本地、远程日志文件进行 分页阅读、实时阅读(websocket)、关键词匹配、统计、监控、钉钉告警、Highcharts趋势图展示 的 Web 平台服务,并包含 用户认证、LDAP认证、操作审计 等基础服务。 DEMO 地址... -
DFA 算法实现关键词匹配
2015-06-12 11:23:08起因: 从网页中爬去的页面,需要判断是否跟预设的关键词匹配(是否包含预设的关键词),并返回所有匹配到的关键词 。 目前pypi 上两个实现ahocorasick https://pypi.python.org/pypi/ahocorasick/0.9 esmre ... -
1秒50万字!js实现关键词匹配
2016-07-29 13:35:48但对于关键词较多的情况下,多次重复调用indexOf、正则的话去匹配全文的话,性能消耗非常大。由于目标字符串通常来说体积都比较大,所以必须要保证一次遍历就得到结果。根据这样的需求,很容易就想到对全文每个字符... -
PHP中文关键词匹配
2018-01-16 15:57:00关键词匹配是比较常见的需求,如留言、弹幕及游戏聊天中的敏感词过滤,都需要对一段文字进行关键词匹配。提取到关键词后,再做进一步处理。 本类借助PHP高效的数组和mbstring扩展,来实现对中文关键词的匹配。主要... -
js实现搜索框关键字智能匹配代码
2020-10-23 01:15:35主要为大家分享了js实现搜索框关键字智能匹配代码,感兴趣的朋友可以参考一下 -
mysql 查询关键词匹配问题
2018-06-26 09:18:44这样的关键词应用怎么匹配,其中color后面的颜色代码是随机的。 ``` 新浪;">腾讯网 ``` -
php+mysql多关键词分词搜索查询,mysql多关键词正则匹配查询,搜索结果关键词匹配度排序
2020-07-07 20:23:38//返回计算关键词匹配次数 if($kCount>1) { foreach ($keywordArr as $m => $item) { $codeLen = strlen ($item); $by .= "($mysqlLen - CHAR_LENGTH(REPLACE($keywordCode,'$item','')))/$codeLen"; if($m != $... -
Python实现文本中的关键词匹配词库的词
2015-11-09 11:17:00现在是两个文本,一个是提取的关键词(即是高频词)的A文本,要与我自己建立的一个词库(设置的一些常用的词语)B文本进行词语匹配。在A文本中检测B词库里面对应匹配成功的词出现的次数,并计数。 就是实现聊天文本中...