技术领域
[0001] 本发明涉及数据处理技术领域,尤其涉及一种前端关键词标亮的实现方法、装置及电子设备。
相关背景技术
[0002] 前端关键词标亮,通常是指在网页或应用程序的用户界面上对特定关键词进行高亮显示的一种技术。这种技术可以用来提高用户体验,帮助用户快速定位到页面中的重要信息,或是为了满足某些特殊需求,如搜索结果中的关键词高亮、代码编辑器中语法元素的着色等。关键词标亮不仅可以提升界面美观度,还能增强内容的可读性和用户的交互效率。
[0003] 实现关键词标亮的方法有多种,根据应用场景和技术栈的不同,开发者可以选择不同的实现方案:
[0004] 1.纯CSS方法:通过标签或者使用CSS的:contains()伪类来简单地标记文本。例如,使用关键词可以在不改变页面布局的情况下让文字以黄色背景突出显示。
[0005] 2.JavaScript实现:对于更复杂的场景,比如动态获取需要高亮的文字并对其进行处理,则需要用到JavaScript。可以通过DOM操作找到对应的文本节点,然后将匹配到的关键字替换为包裹了标签且设置了样式(如背景色、字体颜色等)的新节点。
[0006] 3.正则表达式辅助:当涉及到复杂模式匹配时,利用正则表达式可以帮助精确地定位到待高亮的文字,并避免误标记非目标区域内的相似词组。
[0007] 4.第三方库/插件:市面上也有许多成熟的开源项目提供了现成的解决方案,如Highlight.js用于代码块内不同语言关键字的颜色区分;Mark.js专注于提供灵活高效的文本搜索与高亮功能等。这些工具往往具备更好的性能表现和更多定制选项。
[0008] 现有技术在前端关键词标亮的过程中,存在如下问题:
[0009] 1.正则表达式的局限性:简单的正则表达式可能无法处理所有复杂的文本模式,特别是在处理多语言内容时。
[0010] 2.性能问题:对于大型文本,多次遍历和替换可能导致性能下降。
[0011] 3.缺乏上下文感知:传统方法难以处理需要上下文的情况,如区分URL中的@符号和用户提及。
[0012] 4.难以维护:随着支持的平台和功能的增加,代码可能变得难以维护和扩展。
[0013] 5.国际化支持不足:可能无法正确处理不同语言和字符集的文本。
[0014] 上述问题成为需要解决的技术问题。
具体实施方式
[0086] 下面结合附图对本发明实施例进行详细描述。
[0087] 以下通过特定的具体实例说明本公开的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本公开的其他优点与功效。显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。本公开还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本公开的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
[0088] 需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。
[0089] 还需要说明的是,以下实施例中所提供的图示仅以示意方式说明本公开的基本构想,图式中仅显示与本公开中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
[0090] 另外,在以下描述中,提供具体细节是为了便于透彻理解实例。然而,所属领域的技术人员将理解,可在没有这些特定细节的情况下实践所述方面。
[0091] 本公开实施例提供一种前端关键词标亮的实现方法。本实施例提供的前端关键词标亮的实现方法可以由一计算装置来执行,该计算装置可以实现为软件,或者实现为软件和硬件的组合,该计算装置可以集成设置在服务器、终端设备等中。
[0092] 参见图1及图2,本公开实施例提供了一种前端关键词标亮的实现方法,包括:
[0093] S101,对输入的文本进行预处理后,使用解析算法识别文本中的URL、标签和用户提及,形成包含n个字符的第一文本集合K={K1,K2,…Kn}。
[0094] 对文本预处理,可以移除文本中不必要的空格、制表符和换行符。例如,将连续的多个空格替换为一个空格,还可以根据需要移除标点符号或其他非文本字符。例如,删除句号、逗号、感叹号等,这些符号通常不会出现在URL、标签或用户提及中。最后,将文本转换为统一格式,例如全小写或全大写,以提高后续处理的一致性。这有助于在匹配时忽略大小写的差异。
[0095] 可以使用解析算法识别URL、标签和用户提及,可以通过定义解析规则来进行。
[0096] URL:定义用于识别URL的模式。通常,URL以http://或https://开头,后面跟随域名和路径。可以使用正则表达式来匹配这些模式。
[0097] 标签(hashtags):定义用于识别标签的模式。标签通常以开头,后面跟随字母、数字或下划线。可以使用正则表达式来匹配这些模式。
[0098] 用户提及(mentions):定义用于识别用户提及的模式。用户提及通常以@开头,后面跟随字母、数字或下划线。可以使用正则表达式来匹配这些模式。
[0099] 对于每个定义的模式(URL、标签、用户提及),遍历预处理后的文本,寻找符合该模式的子串。录每个匹配项的起始位置和结束位置。这些位置信息将用于从文本中提取相应的子串。
[0100] 据记录的起始位置和结束位置,从预处理后的文本中提取出相应的子串。将这些子串存储在一个列表中,进而形成第一文本集合K。
[0101] S102,通过关键词匹配函数,处理第一文本集合K中包含的普通词汇、包含特殊字符的词汇以及Unicode字符,形成分割完整词汇的词语边界集合B={B1,B2,…Bm}。
[0102] 可以定义关键词匹配函数,通过关键词匹配函数识别文本中的特定词汇。例如,这个函数需要能够处理以下几种类型的词汇:
[0103] 普通词汇:如“apple”、“banana”等。
[0104] 包含特殊字符的词汇:如“hello‑world”、“C++”等。
[0105] Unicode字符:如中文词汇“苹果”、日文词汇“りんご”等。
[0106] 在应用关键词匹配函数的过程中,可以初始化词语边界集合,创建一个空集合B,用于存储所有识别出的词语边界。
[0107] 对于每个元素Ki∈K,应用关键词匹配函数,找到所有匹配的词汇及其在Ki中的位置,对于每个匹配的词汇,记录其起始位置s和结束位置e。
[0108] 如果两个或多个词汇有重叠部分,选择最长的词汇或根据具体需求进行合并,如果两个词汇紧邻且没有间隔,可以将它们视为一个整体词汇。每个识别出的词汇的起始位置和结束位置作为一个元组(s,e)添加到集合B中。
[0109] 通过上述步骤,可以系统地处理第一文本集合K中的词汇,并形成分割完整词汇的词语边界集合B。这种方法确保了每个词汇都被准确地识别和分割。
[0110] S103,基于字符的位置,对所述词语边界集合B进行区间解析,得到完整词汇的区间集合,对所述区间集合进行去重操作,得到包含s个元素的去重区间集合Q={Q1,Q2,…Qs}。
[0111] 基于字符的位置对词语边界集合B进行区间解析,得到完整词汇的区间集合,并对区间集合进行去重操作,最终得到包含s个元素的去重区间集合Q={Q1,Q2,…Qs},可以包括如下步骤:
[0112] 创建一个空列表C,用于存储解析后的完整词汇区间,对于每个元组(si,ei)∈B,检查C中是否已经存在与当前区间(si,ei)重叠或相邻的区间。如果存在重叠或相邻区间,则合并这些区间。否则,将当前区间(si,ei)添加到C中。
[0113] 将B中的所有区间按起始位置si进行升序排序,得到排序后的集合B'。对于每个区间(si,ei)∈B':如果C为空,或者当前区间的起始位置si大于C中最后一个区间的结束位置elast,则直接将当前区间添加到C中。否则,更新C中最后一个区间的结束位置elast为max(elast,ei)。
[0114] 检查C中是否存在重复的区间。如果存在重复区间,则去除重复项,得到去重后的区间集合Q。
[0115] 通过上述步骤,可以系统地对词语边界集合B进行区间解析,得到完整词汇的区间集合,并进行去重操作,确保每个区间都是唯一的且不重叠。
[0116] S104,基于所述去重区间集合Q={Q1,Q2,…Qs}生成包含p个元素的第二文本集合K’={K’1,K’2,…K’p},通过类型识别函数,对第二文本集合K’中每个元素的文本类型进行识别,得到类型识别向量Z=[Z1,Z2,…Zp]。
[0117] 具体的,可以创建一个空列表K’,对于每个区间Qi=(si,ei)∈Q,从原始文本T中提取子串K’i,其中K’i=T[si:ei+1],将提取的子串K’i添加到K'中。
[0118] 进一步的,可以定义一个类型识别函数R(K’i),该函数接收一个文本片段K’i并返回其文本类型。常见的文本类型包括URL、标签(hashtags)、用户提及(mentions)等。对于每个K’i∈K',应用R(K’i)来识别其文本类型,并将结果存储在类型识别向量Z中。
[0119] 通过上述步骤,可以系统地生成第二文本集合K',并对每个元素的文本类型进行识别,最终得到类型识别向量Z。这种方法确保了每个词汇都被准确地分类和处理。
[0120] S105,基于所述类型识别向量Z=[Z1,Z2,…Zp],对所述第二文本集合K’={K’1,K’2,…K’p}中的每个元素设置对应的高亮样式。
[0121] 可以为不同的文本类型定义相应的高亮样式。例如:
[0122] URL:...`
[0123] 标签(hashtags):`...`
[0124] 用户提及(mentions):...
[0125] 普通词汇:...
[0126] 对于每个K’i∈K',使用类型识别向量Z中对应的类型Zi来选择适当的高亮样式,并将K’i包装在该样式中。
[0127] 例如,可以创建一个空列表H,用于存储高亮后的文本片段。对于每个K’i∈K'和对应的Zi∈Z,查找Zi在style_map中对应的高亮样式,使用该高亮样式将K’i包装起来,将包装后的文本片段添加到H中。将H中的所有高亮文本片段拼接成一个完整的高亮文本字符串。
[0128] 参见图2,根据本公开实施例的一种具体实现方式,所述对所述第二文本集合K’={K’1,K’2,…K’p}中的每个元素设置对应的高亮样式之后,所述方法还包括:
[0129] S201,根据不同的社交媒体平台,为识别出的标签和用户提及创建相应的链接;
[0130] S202,将第二文本集合中的文本转换为包含HTML标记的字符串,使用span元素和预定义的CSS类来实现高亮效果;
[0131] S203,根据输出选项的不同,输出仅包含关键词高亮的基本文本,或输出包含所有高亮和链接的完整处理文本。
[0132] 具体的,可以为标签和用户提及创建链接,包括:
[0133] 定义链接生成规则:
[0134] ‑标签(hashtags):通常在社交媒体平台上,标签会被转换为搜索链接。例如,在abc网站上,`awesome`会变成`https://abc.com/hashtag/awesome`。
[0135] ‑用户提及(mentions):用户提及会被转换为用户的个人页面链接。例如,在abc网站上,`@user123`会变成`https://abc.com/user123`。
[0136] 应用链接生成规则:对于每个标签和用户提及,根据其类型生成相应的链接。
[0137] 接下来,可以将第二文本集合中的文本转换为包含HTML标记的字符串。可以通过创建一个字典或映射表,将每种文本类型映射到相应的高亮样式。
[0138] 可以遍历第二文本集合并应用高亮样式,对于每个K'i∈K'和对应的Zi∈Z,查找Zi在style_map中对应的高亮样式。如果是标签或用户提及,替换%s为实际的文本内容,并生成相应的链接。
[0139] 根据本公开实施例的一种具体实现方式,所述使用解析算法识别文本中的URL、标签和用户提及,形成包含n个字符的第一文本集合K={K1,K2,…Kn},包括:
[0140] 定义函数f(T,P),其中T是预处理后的文本,P是模式集合,P包含用于匹配URL、标签和用户提及的正则表达式或规则;
[0141] 对于T中的每个匹配项,记录其起始位置si和结束位置ei,进而得到第i个匹配项的匹配区间[si,ei];
[0142] 通过匹配区间[si,ei],计算第一文本集合K中的第i个元素Ki=T[si:ei],每个元素Ki对应于T中的一个匹配项,且Ki的长度为ei‑si+1。
[0143] 根据本公开实施例的一种具体实现方式,所述使用解析算法识别文本中的URL、标签和用户提及,形成包含n个字符的第一文本集合K={K1,K2,…Kn},还包括:
[0144] 设T=(t1,t2,…,tL)为预处理后的文本字符串;
[0145] 通过获取匹配区间,得到一系列匹配区间[s1,e1],[s2,e2],…,[sn,en]。
[0146] 对于每个i(1≤i≤n),Ki表示为:Ki=(tj∣si≤j≤ei)。
[0147] 根据本公开实施例的一种具体实现方式,所述通过关键词匹配函数,处理第一文本集合K中包含的普通词汇、包含特殊字符的词汇以及Unicode字符,形成分割完整词汇的词语边界集合B={B1,B2,…Bm},包括:
[0148] 定义用于识别K中与D匹配词汇的关键词匹配函数M(K,D),D是关键词规则集;
[0149] 对于每个Ki∈K,M(Ki,D)返回 ,其中 和分别是第j个词汇在Ki中的起始和结束位置;
[0150] 将所有识别出的词汇边界合并到词语边界集合B中: 。
[0151] 根据本公开实施例的一种具体实现方式,所述基于字符的位置,对所述词语边界集合B进行区间解析,得到完整词汇的区间集合,包括:
[0152] 将词语边界集合B表示为:
[0153]
[0154] 其中,si和ei分别是第i个词汇的起始和结束位置;
[0155] 将B中的所有区间按起始位置si进行升序排序,排序后的集合为B':
[0156]
[0157]
[0158] 初始化一个空的区间集合C,遍历B'中的每一个区间 ;
[0159] 如果C为空,或者当前区间的起始位置s'i大于C中最后一个区间的结束位置 ,则直接将当前区间加入C;
[0160] 否则,更新C中最后一个区间的结束位置 为 。
[0161] 根据本公开实施例的一种具体实现方式,所述基于所述去重区间集合Q={Q1,Q2,…Qs}生成包含p个元素的第二文本集合K’={K’1,K’2,…K’p},通过类型识别函数,对第二文本集合K’中每个元素的文本类型进行识别,得到类型识别向量Z=[Z1,Z2,…Zp],包括:
[0162] 将去重后的区间集合Q表示为:
[0163]
[0164] 其中, 和 分别是第i个区间的起始和结束位置;
[0165] 对于每个区间 ,从第一文本集合的文本T’中提取相应的子串:
[0166]
[0167] 最终形成第二文本集合K':
[0168] ;
[0169] 定义类型识别函数 ,该类型识别函数接收文本片段 并返回其文本类型;
[0170] 对于每个 ,应用R函数来识别其文本类型,并将结果存储在类型识别向量Z中:
[0171] 。
[0172] 根据本公开实施例的一种具体实现方式,所述基于所述类型识别向量Z=[Z1,Z2,…Zp],对所述第二文本集合K’={K’1,K’2,…K’p}中的每个元素设置对应的高亮样式,包括:
[0173] 定义高亮样式映射表S为高亮样式映射表:
[0174]
[0175]
[0176]
[0177] 对于每个 和对应的 ,通过高亮函数H()执行高亮样式转换:
[0178]
[0179] 从而形成最终高亮文本集合H':
[0180] 。
[0181] 与上面的方法实施例相对应,参见图3,本发明实施例还公开了一种前端关键词标亮的实现装置30,包括:
[0182] 解析模块301,对输入的文本进行预处理后,使用解析算法识别文本中的URL、标签和用户提及,形成包含n个字符的第一文本集合K={K1,K2,…Kn};
[0183] 匹配模块302,通过关键词匹配函数,处理第一文本集合K中包含的普通词汇、包含特殊字符的词汇以及Unicode字符,形成分割完整词汇的词语边界集合B={B1,B2,…Bm};
[0184] 去重模块303,基于字符的位置,对所述词语边界集合B进行区间解析,得到完整词汇的区间集合,对所述区间集合进行去重操作,得到包含s个元素的去重区间集合Q={Q1,Q2,…Qs};
[0185] 识别模块304,基于所述去重区间集合Q={Q1,Q2,…Qs}生成包含p个元素的第二文本集合K’={K’1,K’2,…K’p},通过类型识别函数,对第二文本集合K’中每个元素的文本类型进行识别,得到类型识别向量Z=[Z1,Z2,…Zp];
[0186] 高亮模块305,基于所述类型识别向量Z=[Z1,Z2,…Zp],对所述第二文本集合K’={K’1,K’2,…K’p}中的每个元素设置对应的高亮样式。
[0187] 参见图4,本发明实施例还提供了一种电子设备60,该电子设备包括:
[0188] 至少一个处理器;以及,
[0189] 与该至少一个处理器通信连接的存储器;其中,
[0190] 该存储器存储有可被该至少一个处理器执行的指令,该指令被该至少一个处理器执行,以使该至少一个处理器能够执行前述方法实施例中前端关键词标亮的实现方法。
[0191] 本发明实施例还提供了一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使该计算机执行前述方法实施例中。
[0192] 本发明实施例还提供了一种计算机程序产品,该计算机程序产品包括存储在非暂态计算机可读存储介质上的计算程序,该计算机程序包括程序指令,当该程序指令被计算机执行时,使该计算机执行前述方法实施例中的前端关键词标亮的实现方法。
[0193] 下面参考图4,其示出了适于用来实现本公开实施例的电子设备60的结构示意图。本公开实施例中的电子设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图4示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
[0194] 如图4所示,电子设备60可以包括处理装置(例如中央处理器、图形处理器等)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储装置608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM603中,还存储有电子设备60操作所需的各种程序和数据。处理装置601、ROM602以及RAM603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
[0195] 通常,以下装置可以连接至I/O接口605:包括例如触摸屏、触摸板、键盘、鼠标、图像传感器、麦克风、加响应计、陀螺仪等的输入装置606;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置607;包括例如磁带、硬盘等的存储装置608;以及通信装置609。通信装置609可以允许电子设备60与其他设备进行无线或有线通信以交换数据。虽然图4示出了具有各种装置的电子设备60,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
[0196] 特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置609从网络上被下载和安装,或者从存储装置608被安装,或者从ROM602被安装。在该计算机程序被处理装置601执行时,执行本公开实施例的方法中限定的上述功能。
[0197] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。