问题标签 [trigram]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3671 浏览

sql - 字符串匹配的多列索引+与pg_trgm的字符串相似度?

鉴于此表:

和这样的查询:

我可以像这样创建一个pg_trgm 索引来加快查找速度:

(对?)

我的问题:这样的查询怎么样:

我可以创建一个有助于查找两列的索引吗?

(我知道 trigram 并不是严格意义上的全文,但无论如何我都在标记这个问题)

0 投票
3 回答
2557 浏览

python - 如何在特定标记之后和之前获取单词?

我目前从事一个项目,该项目只是创建基本的语料库数据库并对文本进行标记。但似乎我陷入了困境。假设我们有这些东西:

现在我想在一个标记之前和之后找到这个词。

我认为会有三种可能性:token 可能开始句子,token 可能结束句子或者 token 可能出现在句子的某个地方,所以我使用了上面的 regex 规则。当我跑步时,我遇到了这些事情:

我也尝试了 \b\w\b 或 \b\W\b 的东西,但不幸的是那些没有返回任何结果而不是返回错误的结果。我试过了:

我希望问题不会太模糊。

0 投票
1 回答
2202 浏览

postgresql - postgresql 不在 text 列上使用 trigram 索引,但在 varchar 列上使用它

所以基本上我设置了一个非常简单的测试表来测试 postgresql 9.1(库存 Debian 稳定版)中的三元组和全文索引功能。

以下是表和索引定义:

我的问题是,如果我进行%foo%应该使用 trigram 索引的搜索,如果我在文本列上搜索,它不会:

但是,如果我在 varchar600 列中进行搜索,它确实使用了三元组索引,而且——并不奇怪——要快得多:

所以最终的问题是:

  • 为什么 postgres 不在文本列上使用三元组索引。
  • 如何使 postgres 使用索引?我应该以其他方式定义它吗?
0 投票
1 回答
269 浏览

postgresql - Rails 4 pg_search - 多搜索问题

我正在使用 Rails 的 pg_search gem(Ruby 2.1.1,Rails 4.1.4)并尝试为我的一些模型实现全局多搜索,但我不断得到

PG::UndefinedFunction: ERROR: operator does not exist: text % unknown

当我运行 multisearch 命令时。

这是我的模型:

我的搜索查询是这样的Happy Tiger

但是,当我运行时PgSearch.multisearch("Happy Tiger"),我得到了上述错误。

我还有一个初始化器告诉 PgSearch 使用trigram

有任何想法吗???

0 投票
2 回答
153 浏览

machine-learning - 字符串聚类(使用三元组?)

我有一个字符串列表,我想将其分类。然后我想在每个组的字符串上显示。

假设我的列表如下所示:

  • 敏捷的棕色狐狸跳过了懒狗
  • 敏捷的棕色狐狸跳过了懒狗!!!!
  • 棕狐跳过懒狗
  • Zing,矮人运动员 vex 淋巴
  • 矮人运动员 vex 淋巴123
  • 我很喜欢饼干

然后我想展示这样的东西(每个类一个字符串):

  • 敏捷的棕色狐狸跳过了懒狗
  • 矮人运动员 vex 淋巴123
  • 我很喜欢饼干

我知道三元组是将字符串分类为“相似的字符串”和“不同的字符串”的一种非常简单且有用的解决方案。我也很确定它们可用于将字符串列表划分为类,但我不确定如何。

这里的任何人都可以帮助我,还是我应该使用完全不同的东西?

我更喜欢一种简单且可维护的方法,而不是高精度。

0 投票
2 回答
1119 浏览

python - 使用 NLTK 查找整个语料库的三元组并打印到 csv 时出现 Unicode 错误

我正在尝试浏览整个文本文件文件夹,收集所有这些文件中三元组的累积频率,并将它们打印到 csv 文件中。它完成了整个语料库的工作,但是当它开始为三元组工作时,我收到以下错误:

非常感谢你。这是脚本:

0 投票
4 回答
2498 浏览

ruby-on-rails - Rails 中三元组搜索的迁移

我有一个迁移:

它在以下位置生成此代码schema.rb

后来,当我执行rake db:schema:load它时会生成错误的sql:

首先,它说:

错误:数据类型字符变化没有访问方法“gin”的默认运算符类

其次,有失gin_trgm_ops

如何使它起作用?

Rails 4.2

0 投票
1 回答
2183 浏览

performance - 使用 Similarity Postgres 模糊自联接查询提高性能

我正在尝试运行一个查询,该查询将一个表与自身连接起来并进行模糊字符串比较(使用三元组比较)以查找可能的公司名称匹配项。我的目标是返回一条记录的公司名称(ref_name 字段)的三元组相似度与另一条记录的公司名称匹配的记录。目前,我将阈值设置为 0.9,因此它只会带回很可能包含相似字符串的匹配项。

我知道自联接本质上会导致许多比较,但我想尽我所能优化我的查询。我不需要立即得到结果,但目前我正在运行的查询需要 11 个小时才能运行。

我在 Ubuntu 12.04 服务器上运行 Postgres 9.2。我不知道 ref_name 字段(我匹配的字段)的最大长度是多少,所以我将它设置为varchar(300). 我想知道将其设置为文本类型是否会影响性能,或者是否有更好的字段类型可用于提高性能。我的LC_CTYPELC_COLLATE语言环境设置为"en_US.UTF-8"

我正在运行查询的表总共包含大约 160 万条记录,但我需要 11 个小时才能运行的查询是其中的一小部分(大约 100k)。

表结构:

索引:

询问:

解释计划:

以下是一些示例记录:

正如你所看到的,我创建了一个 gist trigram 索引来加快速度(到目前为止尝试了两种不同的类型进行比较)。有人对我如何提高此查询的性能并将其从 11 小时缩短到更易于管理的时间有任何建议吗?最终我想在整个表上运行这个查询来比较记录,而不仅仅是这个小子集。

0 投票
1 回答
679 浏览

ruby-on-rails-4 - pg_search 子字符串的电子邮件地址

我正在使用 pg_search 来 full_text_search 我的客户 d/b 的姓名和电子邮件地址。如果我搜索电子邮件地址的域部分,如何获得匹配?例如hotmail,返回所有带有hotmail 地址的客户。

到目前为止,我采取的步骤包括使用 trigram 搜索和为 trigram 搜索添加 psql 扩展。本文中的评论,PG full text search on rails using pg_search gem for substring表明我需要构建一个文本搜索字典。有人知道如何拆分电子邮件地址吗?

0 投票
0 回答
63 浏览

postgresql - 如何在 PostgreSQL 中执行三元组搜索之前指定条件?

我对 PostgreSQL 中的模糊搜索和三元组相当陌生。我在数据库中有几十万个产品,我希望能够选择名称最接近另一个产品名称的产品。

经过几个小时的试验和研究,我安装了pg_trgm扩展并创建了一个三元索引,如下所示:

以下查询在大约 0.07 秒内执行,目前令人满意:

问题是,我需要进一步指定要搜索的产品类型。我想如果我这样做,它会比以前更快,因为我不是模糊搜索整个数据库,而是只搜索一组特定的产品。但是,由于某种原因,如果我执行以下操作:

...执行时间大约翻了一番。谁能解释为什么会这样?另外,如果您在这方面有经验,您会建议不要使用 PostgreSQL 并使用 Elastic 吗?