如何构建一个语义搜索引擎来搜索表情符号

【Elasticsearch从入门到精通】第43篇:Elasticsearch搜索过程原理——分词、查询树与BM25评分 摘要 本文深入解析Elasticsearch搜索原理的核心环节。首先阐述索引查找相比顺序查找的性能优势(O(1) vs O(n)),随后详细拆解文本分析的三层处理架构:字符过滤器(HTML清理/字符映射)、分词器(标准/中文分词)、词元过滤器(停用词/同义词处理)。通过_analyze API示例演示分词效果验证方法。在查询处理部分,重点剖析查询语法分析如何构建布尔查询树,并对比AND/OR关系的处理差异。最后给出索引与搜索的完整流程示意图,帮助开发者建立从用户输入到结果返回的完整认知框架。关键词:Elas 阅读详情

原文:towardsdatascience.com/how-to-build-a-semantic-search-engine-for-emojis-ef4c75e3f7be?source=collection_archive---------8-----------------------#2024-01-10

寻找你想要的情感 🔍🤔😀🚀

https://medium.com/@jacob_marks?source=post_page---byline--ef4c75e3f7be--------------------------------https://towardsdatascience.com/?source=post_page---byline--ef4c75e3f7be-------------------------------- Jacob Marks, Ph.D.

·发表于Towards Data Science ·阅读时间 15 分钟·2024 年 1 月 10 日

–

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/38c4d89af0b8bd1549b7af17e735042e.png

使用自定义表情符号搜索引擎进行“halloween”的语义搜索。

如果你曾经使用过 Google Docs 或 Slack,你可能注意到,当你输入一个“:”紧接着另一个字符时,会弹出一个表情符号列表:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/22de006beada9fd015206018637aeaf2.png

自从我发现这个功能以来,我就一直在大量使用它。我在我的消息、博客文章和其他书面作品中添加了比我曾经想象的更多的表情符号。事实上,我已经习惯了这种添加表情符号的方式,以至于我安装了Rocket——一款免费应用程序,它将相同的表情符号搜索功能带入到电脑上的所有文本框和文本编辑器中。这真是一个改变游戏规则的工具。

但是,随着我使用这些表情符号搜索引擎的次数越来越多,我注意到一个令人沮丧的限制:所有搜索都基于你查询中的精确文本,以及表情符号的名称和描述。实际上,你需要非常精确地搜索某个词,才能显示出任何结果。

这里有一个例子:如果我们搜索“audio”,一个结果都不会显示出来:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/8a07cd9f11d0ee6dbaebc12f5c01ab83.png

这并不是因为表情符号集合中缺少音频类的表情符号。如果我们输入“music”或“speaker”,我们会得到一长串结果。实际上,这与“audio”这个特定文本串的名称或描述中并没有出现任何表情符号相关的事实有关。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4df2c1363dab033580d0ac83ffbf4870.png

这个相对较小的不便让我感到如此困扰,以至于我决定构建这个:

“这个”指的是一个开源的语义表情符号搜索引擎,具有基于 UI 和 CLI 两个版本。Python CLI 库可以在这里找到,基于 UI 的版本可以在这里找到。你还可以在线尝试一个托管的(也是免费的)UI 表情符号搜索引擎,点击这里。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/2bb7629d1dedcae260e9e34cf7d77451.png

语义表情符号搜索引擎的命令行版本

构建这个过程并不像我最初希望的那样简单或直接。这花了很多实验,很多我认为相当聪明的想法最终都失败了。但最终,我成功地创建了一个相当好用的表情符号搜索引擎。

下面是我如何构建它、哪些方面有效、哪些方面无效,以及在过程中学到的经验教训。

  • 什么是表情符号

  • 数据

  • 表情符号与图片和文本

  • 弥合模态差距

  • 使用表情符号搜索引擎

什么是表情符号

在构建一个表情符号语义搜索引擎之前,值得简要解释一下什么是表情符号。emoji 这个词源自日语汉字絵(eh),意思是图片,以及文字(mōji),意思是字母或字符。从词源学的角度来看,emoji 本质上是一种象形文字,虽然它与英语单词emotion(情感)有关,但它并不是“情感图标”——这才是表情符号。

与字母数字字符、非洲点击音、数学符号和几何符号、装饰符号以及计算机控制序列一起,表情符号可以作为 Unicode 字符表示,从而使它们可以被计算机读取。然而,与字母数字字符和其他符号不同,表情符号由Unicode 联盟进行维护。该联盟会征集新表情符号的提案,并定期选择哪些表情符号将被加入到标准中。

截至写作时,2023 年 11 月,已经有超过 3600 个被认可的表情符号,它们象征着各种各样的思想和情感。有些表情符号由单一的 Unicode 字符或编码点表示。例如,“露齿而笑的脸”表情符号,😀,在 Unicode 中表示为 U+1F600。

其他的则通过代码点序列表示。这些序列将单个代码点表情符号与零宽度连接符 unicode 字符结合,称为 ZWJ 序列,允许将概念组合在一起,就像汉字部首可以组合成一个讲述故事的字符一样。例如,表情符号👨‍👩‍👧就是通过 ZWJ 代码点 U+200D 连接的男人👨(U+1F468)、女人👩(U+1F469)和女孩👧(U+1F467)表情符号:

👨‍👩‍👧 = U+1F468 U+200D U+1F469 U+200D U+1F467

根据 Unicode 联盟的统计,全球 92%的在线用户在通信中使用表情符号,2021 年使用频率最高的十个表情符号是:😂 ❤️ 🤣 👍 😭 🙏 😘 🥰 😍 😊。

从数据开始

由于表情符号在某种程度上是象形文字,我希望在搜索过程中同时利用文本信息和视觉信息。我的初步假设是,对于许多表情符号来说,名称——用于调出表情符号的文本字符串——只传达了其含义的一部分。这可能是由于多种原因,包括自然语言的局限性,以及文化和视觉相似性所赋予的附加含义。为了真正展现表情符号的完整本质,我需要利用视觉信息。

我找到了一份 2021 年的Kaggle Emojis 数据集,其中包含 1816 个表情符号的数据,包括表情符号的表示、与之相关的文本、unicode 编码(或编码)和一个base64编码的图像。以下是该数据集的前几行,加载为 pandas DataFrame 后呈现的样子:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/ac2785f516f75b2549052b5388d10910.png

由于表情符号的渲染方式取决于计算机、网站或应用程序,因此存在名为Apple、Google、Facebook等的单独列。我从 base64 解码这些图像并将其转换为Pillow图像。以下是 Kaggle 数据集中的第一张图像(露齿笑脸):

import base64
from io import BytesIO
from PIL import Image

## decode and convert first row Apple image
im_str = df.Apple[0].replace('data:image/png;base64,', '')
im = Image.open(BytesIO(base64.b64decode(im_str)))
im

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/d2948f4c8927c66d864a400e50897b2f.png

然而,在转换后很明显,这些图像的分辨率非常低。例如,这张图像仅为 72x72 像素。为了提高将要传递给下游模型的图像质量,并且为了改善最终基于 UI 的应用程序中的体验,我将所有这些低分辨率图像传递到Real-ESRGAN,将分辨率提高了 10 倍。

结果图像看起来是这样的:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4d6b93d5b04f05729c9f7dc4e48f6164.png

由于并非所有表情符号在 pandas DataFrame 中的所有图像列都有图像,因此我为每一行使用了第一个有效的 base64 编码。

表情符号与图像和文本

在深入探讨之前,我想强调表情符号的一个关键元素,它使得表情符号如此特别,并且值得拥有自己的语义搜索引擎:从某种意义上说,它们既是图像也是文本。从人类的角度来看,我们可以将每个表情符号表示为一个 Unicode 字符,与文本字符处于同一层面,同时也可以将其表示为一个独立的图像,这两者在前一节中都已经看到。换句话说,如果我们用一只眼睛眯起,我们可以把象形符号看作是一张图片,而如果我们用另一只眼睛眯起,我们可以将同一个象形符号看作是文本。

然而,计算机并不以其眯眼能力而闻名。尽管计算机可以将一个 Unicode 码点显示为表情符号,但机器学习模型可能没有很好的方法将该表情符号解释为文本或图像。

每当我在进行连接图像和文本的语义搜索应用时,我都会从一个被称为 对比语言图像预训练(CLIP)的一组模型开始。这些模型通过对图像-文本对进行训练,生成图像及其标题的相似向量表示或 嵌入,当图像与其他文本字符串配对时,生成不相似的向量。有多种 CLIP 风格的模型,包括 OpenCLIP 和 MetaCLIP,但为了简便起见,我们将重点关注 OpenAI 的原始 CLIP 模型。没有任何模型是完美的,在根本层面上,也没有正确的方式来比较图像和文本,但 CLIP 无疑提供了一个很好的起点。

将表情符号解释为文本

在高层次上,语言模型通过将输入文本转换为一个有序的标记序列,然后编码这些标记和位置信息为一个密集的数值向量。每个语言模型都有自己的词汇表,用于将文本字符串分解为标记,涵盖了从单个字母到完整单词的范围。一些标记对于人类来说很容易理解,而另一些则不容易理解,在 CLIP 的情况下,词汇表包含了 49,408 个条目。

让我们看一个明确的例子。假设已安装 CLIP 库,我们可以使用以下方式对文本字符串“a dog”进行分词处理:

import clip
text_tokens = clip.tokenize("a dog")
print(text_tokens)
tensor([[49406,   320,  1929, 49407,     0,     0,     0,     0,     0,     0,
             0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
             0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
             0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
             0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
             0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
             0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
             0,     0,     0,     0,     0,     0,     0]], dtype=torch.int32)

输出张量包含四个非零条目:49406、320、1929 和 49407。为了理解这些条目的含义,我们可以将这些值映射回 CLIP 词汇字典中的键。第一个数字 49406 对应于键“<|startoftext|>”,最后一个数字 49407 对应于键“<|endoftext|>”。这些是表示要编码的文本字符串开始和结束的特殊标记。第二个数字 320 映射回“a”,表示字符“a”后跟一个新单词。最后,1929 是键“dog”的值。

然而,如果我们尝试标记化包含表情符号的字符串,我们会很快遇到问题:表情符号不像其他字符那样被标记化。让我们从狗表情符号🐶开始:

clip.tokenize("🐶")
## [49406, 10631, 49407, 0, ...]

对与 10,631 相关的键进行反向查找时,我们得到标记“ðŁIJ¶”。但是如果我们将这个字符串传入分词器,我们会得到一组完全不同的标记 ID:

clip.tokenize("ðŁIJ¶")
## [49406, 127, 108, 40419, 72, 329, 126, 370, 49407, 0, ...]

一个更为有趣的案例是关于国旗表情符号的。如果我们以喀麦隆国旗的表情符号为例,我们得到:

clip.tokenize("🇨🇲")
## [49406, 8989, 366, 49407, 0, ...]

这里的两个非开始/结束标记对应于“ðŁĩ¨ðŁĩ”和“²”。如果我们将第一个标记重新输入分词器,我们会得到一组完全不同的标记 ID,但第二个标记会映射回其自身。

当我们开始比较文本字符串的嵌入与通过这个分词器解析为文本字符串的表情符号嵌入时,情况变得更加复杂。毕竟,我们希望根据文本查询找到最相关的表情符号。我们可以使用余弦距离来衡量两个向量的相似性或差异性——间接地,衡量生成这些嵌入向量的输入之间的差异。0 的距离意味着两个向量完全对齐,而 1 的距离则意味着两个向量正交。如果我们想把表情符号当作文本处理,我们希望表情符号的名称与嵌入空间中的标记化表情符号相对接近,但这并不总是如此!

以下工具将比较一个表情符号和一系列文本提示:

!pip install fiftyone

from scipy.spatial.distance import cosine
import fiftyone.zoo as foz

model = foz.load_zoo_model("clip-vit-base32-torch")

def compare_emoji_to_texts(emoji, texts):
    emoji_embedding = model.embed_prompt(emoji)
    text_embeddings = model.embed_prompts(texts)

    for text, text_embedding in zip(texts, text_embeddings):
        print(f"Dist b/w {emoji} and {text}: {cosine(emoji_embedding, text_embedding):.4f}")

这是一个示例,根据 CLIP 的结果,"生日"表情符号🎂的编码更接近“男人”而非“生日”,更接近“狗”而非“生日礼物”,更接近“车”而非“蜡烛”、“约会”或“假期”:

texts=​​["birthday", "birthday present", "cake", "candle", "car", "date", "dog", "holiday", "man"]

compare_emoji_to_texts("🎂", texts)
Dist b/w 🎂 and birthday: 0.1205
Dist b/w 🎂 and birthday present: 0.1385
Dist b/w 🎂 and cake: 0.1238
Dist b/w 🎂 and candle: 0.2030
Dist b/w 🎂 and car: 0.1610
Dist b/w 🎂 and date: 0.1921
Dist b/w 🎂 and dog: 0.1344
Dist b/w 🎂 and holiday: 0.1844
Dist b/w 🎂 and man: 0.0849

有时,表情符号及其名称(以及类似的概念)在嵌入空间中彼此接近,但有时它们显然并非如此。

我们也可以反过来,检索出与输入文本提示的嵌入最匹配的表情符号。例如,对于输入“爱”,我们得到以下结果:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/9df5407cefbb3a9eb346f00af77ca861.png

当然,我们可以做得比这更好!

将表情符号解释为图像

我们使用 Real-ESRGAN 生成的高分辨率表情符号图像提供了一条替代的表情符号搜索路径:将表情符号视为图像。我们可以使用 CLIP 的视觉编码器将这些图像嵌入到相同的向量空间中,然后通过输入文本提示查询这些图像嵌入。

对于跨模态检索(或通过文本搜索图像)等应用,CLIP 通常在将图像嵌入与包含用户查询的文本提示“一个关于的照片”进行比较时表现最佳。例如,一张狗的照片的图像嵌入与“一个关于狗的照片”的嵌入之间的距离会比与原始查询“狗”的嵌入之间的距离更近(从向量之间的角度来看)。

然而,当我使用这个模板时,结果并不理想。例如,以下是查询“狗的照片”时的前 25 个结果:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/d281ba379d7de5eb874e930f9e631113.png

因为表情符号并不完全是照片,所以我决定深入挖掘这一点,并尝试几种模板或包装策略。为了全面测试,我测试了五种文本提示格式:

  1. <emoji_name>

  2. 一张<emoji_name>表情符号的照片

  3. 一个<emoji_name>的表情符号

  4. 一张<emoji_name>表情符号的照片

  5. 一个<emoji_name>表情符号

我用这些方法为所有 1816 个表情符号生成了嵌入,并计算了这些向量与相应图像嵌入向量的 CLIPScore(余弦相似度乘以 100)。

这里是综合结果:

Method        Min       Mean     Max
A             16.96     29.04    37.49
B             15.85     29.47    38.43
C             18.94     33.25    44.60
D             19.47     32.59    42.57
E             18.95     31.83    43.35

根据这些统计数据,我认为“An emoji of”描述最适合,因为它们具有最高的均值和最大值。但当我尝试使用这个时,结果依然不理想。它们似乎偏好面部表情(例如😄😢🙃👦👧),忽视了其他表情符号,如符号、动物和旗帜。在语义表情符号搜索时,我发现直接输入原始文本通常效果最好。换句话说,“dog”这个词的 CLIP 嵌入效果比“A photo of a dog”或“An emoji of a dog”要好。

这里有几点收获:

  • 图像-文本的“对齐”整体上对语义搜索不一定重要

  • 表情符号的图像在某种程度上编码了它们不是照片的事实

  • “emoji”这个词使 CLIP 偏向面部

弥合模态差距

到此为止,我已经得出结论,将表情符号仅视为图像或仅视为文本会遗漏很多丰富的信息。为了构建一个强大的语义表情符号搜索引擎,我希望结合文本和图像信息,弥合这两种模态之间的差距。

我尝试使用 Adept 的多模态模型Fuyu-8b生成表情符号图像的描述,但这些描述过于详细;我尝试使用其他类似 CLIP 的模型,如MetaCLIP,但表现与 CLIP 相同;我甚至尝试使用GPT-4V生成表情符号图像的标题,但由于模型的查询频率限制为每天 100 次,我被 OpenAI 中断了。

最终,我能够将表情符号的 Unicode 字符传递到基础的 GPT-4 API 中,提示为:

QUERY_TEXT = """
Your task is to write a brief description of the emoji {emoji}, in the format 'A photo of a ...'.  For example, 'A photo of a dog'. Do not include the emoji name or unicode in your description. Do not include the skin tone of the emoji. Do not include the word yellow in your response.  You may include the word 'emoji' in your description, but it is not necessary. Your description should be a single phrase, of no more than 10 words.
"""

在对这些标题进行后处理后,我删除了“A photo of”前缀,并将这些描述用于语义搜索管道中。

表情符号搜索引擎的工作原理如下,输入query:

  1. 生成 100 个候选表情符号(从 1816 个中选择),使用图像相似度搜索将图像嵌入与查询嵌入进行比较。保存此排序,clip_image_ordering。

  2. 按照表情符号名称的 CLIP 嵌入与查询嵌入的相似度对这些候选表情符号进行排序(clip_name_ordering)。

  3. 使用 cross-encoder,根据表情符号名称的相似性(cross_encoder_name_ordering)和由 GPT-4 生成的描述(cross_encoder_description_ordering)对表情符号进行排序。

  4. 使用 互惠排名融合 将四种排序结合起来,并返回排名靠前的结果!

结果搜索引擎虽然不完美,但在结合文本和视觉信息方面做得不错。由于使用 cross-encoder 计算开销较大(且延迟较高),因此它仅用于简化后的候选集。我使用的是 distilroberta-base 检查点,并配合 Sentence Transformers 库中的 CrossEncoder 类。

当所有这些步骤结合在一起时,结果如下:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/2ddaf850b6a4265b791b6faf02d0df4f.png

再次强调,它不是完美的,但它还不错!

使用表情符号搜索引擎

有三种方式可以使用这个表情符号搜索引擎:托管版(免费)、通过用户界面在本地使用(开源)或者通过命令行在本地使用(同样是开源的)。这三种方式都非常简单!

在线版

访问 try.fiftyone.ai/datasets/emojis,登录(免费),然后点击网格上方菜单中的表情符号按钮。就是这样!

通过用户界面本地使用

如果你想在本地使用相同的视觉界面进行表情符号搜索,可以使用 Emoji Search 插件 进行 FiftyOne 搜索。

首先,安装 FiftyOne:

pip install fiftyone

然后下载 Emoji Search 插件并安装其依赖:

fiftyone plugins download https://github.com/jacobmarks/emoji-search-plugin
fiftyone plugins requirements @jacobmarks/emoji_search --install

启动 FiftyOne 应用:

fiftyone app launch

点击“浏览操作”文本,搜索“emoji”,然后点击“创建 Emoji 数据集”条目。这将下载表情符号的高清图像、嵌入以及所有相关数据。在应用的左上角,点击“选择数据集”框,选择“Emojis”。现在,你应该看到与托管版本相同的用户界面。

通过 CLI 本地使用

最后,你可以通过命令行使用 Emoji Search Python CLI 库进行搜索。可以通过以下命令从 GitHub 仓库安装该软件包:

pip install git+https://github.com/jacobmarks/emoji_search.git

然后,你可以使用 emoji-search 命令进行搜索,后面跟上文本查询(带不带引号均可)。

emoji-search beautiful sunset
+-------+-----------------+---------+
| Emoji |       Name       Unicode  |
+-------+-----------------+---------+
|  🌞   |   sun with face | U+1F31E |
|  🌇   |      sunset     | U+1F307 |
|  🌅   |      sunrise    | U+1F305 |
|  🔆   |   bright button | U+1F506 |
|  🌆   |cityscape at dusk| U+1F306 |
+-------+-----------------+---------+

第一次执行搜索时,如果需要,会将嵌入下载到你的设备上。

所有三个版本都支持通过 pyperclip 复制表情符号到剪贴板。在用户界面中,点击表情符号的图像,你会看到菜单中出现一个复制按钮。在命令行界面中,使用 -c 参数将顶部结果复制到剪贴板。

结论

表情符号可能看起来是一个无聊的主题,让人感到过度关注。但实际上,语义表情符号搜索引擎相比于词汇表情符号搜索,其实用性可能有限。这个工作的真正价值在于理解我们传统上认为是独立的两种模式——图像和文本——之间的边界和重叠。表情符号恰好位于这个交汇点,因此,它们让我们能够探究今天多模态模型的优缺点——它们的能力与局限。

我最终构建的语义表情符号搜索引擎远非完美。坦率来说,表情符号具有主观性,代表不同的人可能有不同的含义,这一点是无法精确地封装的。但回到激发这个想法的例子,当我输入“一个音频播放器”时,我得到了几个不错的结果:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1861d91728d8781810ec0c2072406e80.png

我将以哈佛大学甘尼迪学院教授、前《时代》杂志执行编辑南希·吉布斯的一句话作为结尾:

表情符号之所以特别,是因为[它们]帮助了数百万人比牛津词典中广泛的词汇还要更好地表达自己。

南希·吉布斯

注意:文章中的所有图像由作者创作,除非另有说明

【Elasticsearch】Elasticsearch ICU现在可以理解表情符号了! 1.概述 翻译:https://jolicode.com/blog/elasticsearch-icu-now-understands-emoji ES 6.4中的这个简单变化可能会对你的指数产生你可能认为的更大的影响。 sticsearch 6.4与Lucene 7.4一同发布——这是官方发布的一个小标题,但如果你仔细观察,这个新版本发布了ICU数据和对emoji的真正支持。这将改变游戏规则????(对某些人来说!) Unicode的国际组件(ICU)是一个成熟的C/ c++和Java库支持Unicode 阅读详情

相关推荐

表情符号分割器:emoji-segmenter的原理与应用

分词技术定义了将文本分解为语法和语义上独立的最小单位的过程。这些单位可以是单词、短语、符号或任何形式的字符序列。在不同的语言和应用中,分词方法有所不同。比如在中文中,分词需要确定词的边界,因为中文字符不象英文有空格分隔。分词的作用包括但不限于:文本搜索、语言翻译、语音识别、文本摘要等。# 示例:Python实现的简单中文分词方法text = '我爱自然语言处理。print(tokens) # 输出分词结果在上述代码中,我们使用了jieba这个流行的中文分词库对一段中文文本进行分词。

weixin_28721743的博客 1315

Markdown表情符号速查与高效应用指南

本文详细介绍了Markdown表情符号的高效应用技巧,包括技术文档和社交平台中的实用组合、跨平台输入方案以及IDE集成方法。通过合理的表情符号使用,可以提升文档的可读性和互动性,同时避免常见误区。特别适合开发者和内容创作者提升Markdown文档的表现力。

weixin_38168728的博客 279

华为2288H V5服务器断电后‘趴窝’?别慌,手把手教你用SmartKit+BMC修复工具搞定

本文详细介绍了华为2288H V5服务器在断电后无法启动的修复方法,通过SmartKit和BMC修复工具进行故障诊断与修复。文章提供了从工具获取、安装到具体修复流程的完整指南,帮助运维人员快速恢复服务器运行,并给出了后续加固与预防措施,确保服务器稳定运行。

weixin_30575517的博客 297

Elasticsearch:如何实现对 emoji 表情符号进行搜索

Elasticsearch 是一个应用非常广泛的搜索引擎。它可以对文字进行分词,从而实现全文搜索。在实际的使用中,我们会发现有一些文字中包含一些表情符号,比如笑脸,动物等等,那么我们该如何对这些表情符号来进行搜索呢? ???? => ????, light skin tone, skin tone, type 1–2 ???? => ????, medium-light skin tone, skin tone, type 3 ???? => ????, medium skin ton

Elastic 中国社区官方博客 4406

电源工程师必看:平均电流模式BUCK双环控制详解(从传递函数到Psim仿真)

本文详细解析了平均电流模式BUCK变换器的双环控制策略,从传递函数推导到Psim仿真实现。针对电源工程师关注的环路设计和稳定性问题,深入比较了电压模式、峰值电流模式和平均电流模式的优缺点,并提供了12V/3A BUCK变换器的完整设计案例,帮助工程师掌握平均电流控制这一中高功率应用的首选方案。

weixin_42696271的博客 398

WPS中VBA支持库安装全攻略:从报错到一键解决

VBA作为Office生态中广泛使用的宏语言,是办公自动化的重要基础。WPS表格虽然兼容Excel文件格式,但出于技术路线与授权原因,默认并未集成完整的VBA引擎与开发环境,导致用户打开含宏文件时频繁遇到“找不到工程或库”“未找到VBA支持库”等报错。理解VBA支持库包含引擎与IDE两层结构,并掌握系统位数、版本匹配、安全软件拦截等前置条件,是成功部署的关键。通过可靠的安装源与规范流程完成配置后,即可实现在WPS中运行Excel宏、批量处理数据、自定义函数等自动化场景,显著提升报表处理效率。本文围绕WPS中

weixin_31102231的博客 309

使用 AI [特殊字符][特殊字符][特殊字符]开发一个支持 50 多种语言的表情符号语义搜索引擎

原文:towardsdatascience.com/semantic-search-for-emojis-in-50-languages-using-ai-f85a36a86f21?

龙哥盟 115

el-table通过上下左右键移动光标

在Element Plus的el-table中包含el-input和el-select组件,要实现上下左右键控制光标位置,需要通过focus和blur跟踪判断当前是哪个el-input或el-select有焦点,当按键按下时,通过监听,计算下一个获取焦点元素的索引,通过focus方法将焦点切换至改元素。

秋思的博客 1350

终极Emoji表情符号使用指南:5分钟快速掌握表情符号搜索技巧

想要在GitHub、Slack、Trello等平台上快速找到合适的情感表达?Emoji-Cheat-Sheet.com表情符号速查表是你的完美解决方案!这个开源项目汇集了数千种表情符号,支持超过50个主流平台,让你在沟通中更加生动有趣。 ## 表情符号速查表的核心功能 Emoji-Cheat-Sheet.com是一个功能强大的表情符号搜索引擎,专为解决表情符号记忆难题而生。无论你是开发者、设计

gitblog_00533的博客 582

嵌入式状态机编程-QP状态机框架与常见状态机方法

状态机基本术语 现态:是指当前所处的状态。 条件:又称为“事件”,当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。 动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。 次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。 传统有限状态机Fsm实现方法 如图,是一个定时计数器,计数器存在两种状态,一种为设置状态,一种为计时状态 设

qq_36969440的博客 9665

用AI助手Cursor轻松自动生成流程图

通过 Cursor + Mermaid,我们可以快速、准确地自动生成流程图,上面演示的例子部分流程图可能比较丑,我们可以通过流程图软件导入Mermaid代码,然后手动进行微调就可以了,如果你对美观要求不是特别多,可以直接用,这将极大地提升代码可视化和架构设计的效率。

呱牛 Just do IT 1939

终极指南:命令行表情符号神器emoj全解析

你还在为找不到合适的表情符号而烦恼吗?作为开发者,是否经常需要在文档、提交信息或聊天中快速插入表情符号,却苦于没有高效工具?本文将全面解析命令行表情符号搜索工具emoj的安装配置、高级用法与问题解决方案,让你5分钟内成为表情符号大师,极大提升工作沟通效率。 读完本文你将获得: - 3种操作系统的极速安装方案 - 10+实用命令组合与场景示例 - 5级皮肤色调定制技巧 - 7个常见问题的快速解决方

gitblog_00175的博客 1110

2026 企查查/天眼查:IP频率限制 + 验证码策略,企业工商数据采集实战

企业工商数据采集技术解析与解决方案 本文深度剖析了2026年企查查和天眼查平台的反爬机制与技术对抗方案。主要内容包括: 反爬机制分析: 采用JA4+ TLS指纹识别、极验v6验证码等多层防护 IP限制策略严格区分未登录/普通/VIP账号 精准识别并封禁数据中心IP 核心解决方案: 构建高可用住宅代理池,动态轮换真实用户IP 基于YOLOv8的验证码缺口识别技术(准确率99%) 分布式架构设计,支持千万级数据采集 多账号池管理与行为模拟技术 技术亮点: 动态住宅IP池实现1%以下封禁率 Playwright浏

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1327

搜索web搜索引擎_Web设计师的20个最佳图标搜索引擎

尽管图标只是微小的图形,但它们确实会对您的整体界面和网页设计产生很大的影响。 因此,设计师总是在寻找具有不同风格的新图标。 与通过图标搜索引擎获得新图标相比,哪种方法更有用。 但是,等等,您不必四处看看,因为这篇文章正是您所需要的。 在下面的列表中,您将找到最佳图标搜索引擎,图标库和存储库的集合,这些图标可为项目找到独特的新图标。 因此,请继续阅读以详细了解每个项目及其功能。 50多个...

cune1359的博客 605

把 SAP Event Mesh 讲透:从事件驱动架构到 SAP BTP 落地实践

摘要: SAP Event Mesh是SAP BTP上的云端消息与事件服务,支持企业构建解耦、弹性的应用架构。它通过异步通信模式(如发布/订阅)解决传统同步集成的痛点,如系统紧耦合、链路脆弱等问题。核心能力包括事件驱动通信、可靠消息投递(支持至少一次送达)、与SAP生态深度集成(如S/4HANA事件扩展)以及混合环境支持。典型场景包括订单处理、库存同步等,发布方只需发出业务事件,订阅方按需消费,避免系统间直接依赖,符合Clean Core理念。两种关键模式为广播式的Publish/Subscribe和定向的

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 116

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

探索表情符号的魔力:emoji-regex

在如今的数字化世界中,表情符号(emoji)已经成为我们日常交流不可或缺的一部分。它们是情感和信息的快速表达方式,无论是社交媒体,电子邮件,还是聊天应用,都能看到它们的身影。为了方便地处理这些表情符号,我们有这样一个工具——`emoji-regex`,一个强大的JavaScript库,旨在帮助开发者高效且准确地识别和操作Unicode标准中的所有表情符号。 ## 项目介绍 `emoji-reg...

gitblog_00075的博客 694

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

探秘 `EmojiRegex`:一个强大的表情符号正则表达式库

探秘 EmojiRegex:一个强大的表情符号正则表达式库 项目简介 在数字化的信息交流中,表情符号(Emoji)已经成为不可或缺的一部分。EmojiRegex 是一个由 zly394 创建的开源项目,它提供了一套强大且灵活的正则表达式,用于识别和处理文本中的各种表情符号。通过简洁的 API,开发者可以轻松地在其应用程序中集成这个库,提升对表情符号的支持。 项目的主页位于: 技术分析 EmojiR...

gitblog_00009的博客 846

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

别再用standard了!ES自定义分词器从入门到精通:过滤停用词/保留HTML标签/表情符号转换

本文深入探讨了Elasticsearch自定义分词器的构建与应用,从过滤停用词、保留HTML标签到表情符号转换等实战场景,帮助开发者突破standard分词器的局限。通过组合Character Filter、Tokenizer和Token Filter三大组件,实现精准的语义化解析,提升搜索质量与效率。文章还涵盖了同义词扩展、多字段分析等高级技巧,并提供了性能监控与常见陷阱的规避方法。

weixin_30952535的博客 414

表情符号 unicode_高度可定制的Unicode表情符号选择器

表情符号 unicode 高度可定制的Vue 2表情符号选择器 (Highly-customizable emoji picker for Vue 2) Very simple, yet powerful, vue emoji picke. 非常简单但功能强大的Vue表情符号选择器。 Simple, html-only demo 简单,仅html演示 Complete, css-styled ...

cuk5340的博客 752

TowardsDataScience 2024 中文翻译(一百二十四)

如我之前提到的,k在 k-均值中是你最终希望得到的簇的数量,你应该在训练模型之前设置这个值。尽管“主题”对我们人类来说似乎是一个完全直观且不言自明的术语,但当我们试图给它一个有用且信息丰富的定义时,情况却并非如此。幸运的是,牛津词典的定义可以帮助我们:一种被讨论、写作或研究的主题。嗯,这并没有让我们更接近可以用计算术语表述的内容。请注意,“主题”一词被用来掩盖所有复杂的细节。然而,这不应使我们气馁,我们当然可以做得更好。学科的语义空间在自然语言处理(NLP)中,我们经常使用语义的空间定义。

龙哥盟 1787

emoji-css SEO优化:如何让表情符号提升网站可访问性

在现代网页设计中,表情符号(Emoji)已成为增强用户体验和传达情感的重要元素。**emoji-css** 作为一个轻量级工具库,提供了一种简单直观的方式将表情符号集成到HTML中,不仅能美化界面,还能通过合理的SEO优化提升网站可访问性。本文将详细介绍如何利用emoji-css实现这一目标,让你的网站在视觉吸引力和搜索引擎排名上双重受益。 ## 为什么选择emoji-css? emoji-c

gitblog_00685的博客 451

searchemoji:表情搜索利器,支持30种语言,一键复制

searchemoji:表情搜索利器,支持30种语言,一键复制 项目介绍 在数字化交流日益频繁的今天,表情符号已成为表达情感和增强沟通效果的重要工具。SearchEmoji 是一款开源的表情搜索引擎,它支持30种语言,让用户轻松找到并复制所需表情符号。这款工具不仅能丰富你的文档、信息和社交媒体帖子,还能让你的交流更加生动有趣。 项目技术分析 SearchEmoji 项目采用了前沿的技术构建而成。它...

gitblog_00417的博客 863

为什么 Elasticsearch 搜索这么快?深入理解倒排索引与分词器原理

Elasticsearch实现毫秒级搜索的核心在于倒排索引和分词器。倒排索引通过存储"关键词→文档ID列表"的映射关系,避免了传统数据库的全表扫描,极大提升搜索效率。文章详细解析了倒排索引的构建过程,包括分词、归一化等关键步骤,并介绍了Elasticsearch内置的各种分词器(Standard、Simple、Keyword等)的特点和使用场景。通过实际案例和图解,帮助读者深入理解这两个核心概念及其在搜索过程中的应用原理。

程序员天天困的博客 951

热键打开程序_秘密热键在任何应用程序中打开Windows 10的新表情符号选择器

热键打开程序Windows 10 has a hidden emoji picker you can use to type emoji in any application, even desktop programs like Google Chrome. It’s accessible by pressing a keyboard shortcut combination. Windows...

659

2026年AI获客GEO优化服务商横评:AI搜索引擎排名与AI推荐机制拆解

AI获客的入口正从搜索结果页转向AI回答,一次AI搜索通常只引用3到5个信源。本文用五个维度拆解GEO优化与AI搜索引擎排名的作用机制,对比五类技术路线的分工与能力边界,给出可复算的验收口径和90天推进节奏。据公开报告梳理,结构化程度高的内容进入AI推荐名单的概率明显更高,复测也更稳定。

LB967816的博客 691
上一篇: 如何构建一个带自查询检索器的 RAG 系统
下一篇: 如何使用 Burr、FastAPI 和 React 构建流媒体代理
绝不原创的飞龙
绝不原创的飞龙 优质创作者: 人工智能、数据科学与机器学习技术领域 优质创作者: 人工智能、数据科学与机器学习技术领域
博客等级 码龄15年 4万+粉丝 2万+原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值