标签: fuzzy-search

用NHibernate对连续全名进行模糊搜索

我试图将以下SQL转换为NHibernate:

SELECT * FROM dbo.Customer
WHERE FirstName + ' ' + LastName LIKE '%' + 'bob smith' + '%'
Run Code Online (Sandbox Code Playgroud)

我试图做这样的事情,但它不起作用:

name = "%" + name + "%";

var customers = _session.QueryOver<Customer>()
            .Where(NHibernate.Criterion.Restrictions.On<Customer>(c => c.FirstName + ' ' + c.LastName).IsLike(name))
            .List();
Run Code Online (Sandbox Code Playgroud)

我基本上要做的是能够在文本框中搜索客户名称,其示例值为"bob smith",并使用上面SQL中的LIKE表达式搜索数据库.

如果我要错误地搜索FirstName和LastName列,请帮我一个替代方案,但上面的SQL查询可以得到我需要的东西.

更新2个解决方案:

所以我现在找到了解决这个问题的两种方法.一种是使用Criteria API.以下帖子的答案非常有用:https://stackoverflow.com/a/2937100/670028

我找到了另一个解决方案,感谢我的一位有用的同事建议使用LINQ投影和匿名类型.这是使用LINQ的解决方案:

var customers = session.Query<Customer>()
    .Select( x => new { FullName = x.FirstName + " " + x.LastName, Customer = x } )
    .Where( x => x.FullName.Contains( "Bob Smith" ) ) …
Run Code Online (Sandbox Code Playgroud)

c# sql linq nhibernate fuzzy-search

6
推荐指数
1
解决办法
2126
查看次数

我可以在Apache Lucene的标准语法中组合模糊和邻近搜索吗?

我正在搜索由OpenGrok索引的代码库,-a选项已启用,允许搜索词的第一个字符为通配符.我想找到所有出现的带有foo一些字符串参数的方法(foo("")在字符串中有一个或多个字符),并且该方法在变量的5个字内bar.


随着标准标记化器提供的单词分解,我可以使用它+full:"foo bar"~5来使所有foo(附近bar,但排除无参数方法是一个问题,因为("索引为两个空白字符,所以例如foo("jar") 似乎匹配foo AND \ \ AND jar AND \ \".该语法看起来并不像它支持这种组合(即使没有通配符的字符串,而不是搜索"jar")与""~5邻近搜索.有关如何实现全部或部分内容的任何想法,因为目前不能更改令牌器吗?

lucene search fuzzy-search proximity opengrok

6
推荐指数
0
解决办法
940
查看次数

如何将模糊完成(如Sublime Text调色板)添加到ZSH

我将shell从bash更改为zsh,我想知道是否可以像Sublime Text调色板一样模糊完整命令.我认为这种搜索,完成的概念必须无处不在.节省了大量时间.

示例:

cd dcmts -> cd Documents

cd dwnls/mnf -> cd Downloads/MyNewFolder

我看到了以下项目,但这并不是很有说服力.

zsh的模糊匹配

并且似乎可以定义一些设置或算法来配置zsh在完成时的行为.

zstyle ':completion:*' completer _complete _match _approximate

zstyle ':completion:*:match:*' original only

zstyle ':completion:*:approximate:*' max-errors 10 numeric

之前两个解决方案的问题是文件夹在完成时不会出现在列表的顶部,而通常是用户想要的.

如果您有任何有趣的.zshrc模糊搜索,那将会很有趣.

谢谢你的帮助.

fuzzy-search zsh sublimetext

6
推荐指数
3
解决办法
2368
查看次数

使用elasticsearch进行模糊字符串匹配并返回编辑距离或相似度分数

我正在尝试使用模糊结果进行匹配查询,并根据编辑距离对结果进行排序。然而,elasticsearch 返回一个基于频率和每个查询的相关性分数 (_score)。无论如何,有没有办法仅从elasticsearch 获取编辑距离。另外,编写我自己的自定义函数来计算编辑距离是否会减慢搜索速度?

fuzzy-search levenshtein-distance elasticsearch

6
推荐指数
0
解决办法
1256
查看次数

SQL 模糊连接 - MSSQL

我有两组数据。现有客户和潜在客户。

我的主要目标是弄清楚是否有任何潜在客户已经是现有客户。但是,跨数据集的客户命名约定是不一致的。

现有客户

Customer /  ID
Ed's Barbershop /   1002
GroceryTown /   1003
Candy Place /   1004
Handy Man / 1005
Run Code Online (Sandbox Code Playgroud)

潜在客户

Customer
Eds Barbershop
Grocery Town
Candy Place
Handee Man
Beauty Salon
The Apple Farm
Igloo Ice Cream
Ride-a-Long Bikes
Run Code Online (Sandbox Code Playgroud)

我想写一些像下面这样的选择语句来达到我的目标:

SELECT a.Customer, b.ID
FROM PotentialCustomers a LEFT JOIN
     ExistingCustomers B
     ON a.Customer = b.Customer
Run Code Online (Sandbox Code Playgroud)

结果将类似于:

Customer /  ID
Eds Barbershop  / 1002
Grocery Town    / 1003
Candy Place / 1004
Handee Man  / 1005
Beauty Salon /  NULL …
Run Code Online (Sandbox Code Playgroud)

sql t-sql fuzzy-search fuzzy-logic fuzzy-comparison

6
推荐指数
2
解决办法
1万
查看次数

生成拼写错误的单词(错别字)

我已经实现了一个模糊匹配算法,我想使用一些带有测试数据的示例查询来评估它的召回率。

假设我有一个包含文本的文档:

{"text": "The quick brown fox jumps over the lazy dog"}
Run Code Online (Sandbox Code Playgroud)

我想看看我是否可以通过测试诸如“sox”或“hazy drog”而不是“fox”和“lazy dog”之类的查询来检索它。

换句话说,我想向字符串添加噪音以生成拼写错误的单词(错别字)。

自动生成带有拼写错误的单词以评估模糊搜索的方法是什么?

python nlp fuzzy-search

6
推荐指数
2
解决办法
3686
查看次数

列表性能中的Python模糊匹配字符串

我正在检查 4 个相同的数据框列中是否有类似的结果(模糊匹配),我有以下代码作为示例。当我将它应用到真正的 40.000 行 x 4 列数据集时,会一直运行在永恒中。问题是代码太慢了。例如,如果我将数据集限制为 10 个用户,则计算需要 8 分钟,而需要 20、19 分钟。有什么我想念的吗?我不知道为什么这需要那么长时间。我希望在 2 小时或更短的时间内获得所有结果。任何提示或帮助将不胜感激。

from fuzzywuzzy import process
dataframecolumn = ["apple","tb"]
compare = ["adfad","apple","asple","tab"]
Ratios = [process.extract(x,compare) for x in dataframecolumn]
result = list()
for ratio in Ratios:
    for match in ratio:
        if match[1] != 100:
            result.append(match)
            break
print (result) 
Run Code Online (Sandbox Code Playgroud)

输出:[('asple', 80), ('tab', 80)]

python fuzzy-search duplicates string-matching

6
推荐指数
1
解决办法
5830
查看次数

ElasticSearch 中的模糊搜索不适用于空格

我在 ElasticSearch 中使用模糊搜索选项。它太酷了。

但是我在搜索有空格的值时遇到了一个问题。例如说我有两个值:

"Pizza"
"Pineapple Pizza"
Run Code Online (Sandbox Code Playgroud)

我使用以下查询搜索 Pizza:

        client.search({
            index: 'food_index',
            body: {
                query: {
                    fuzzy: {
                        name: {
                            value: "Pizza",
                            transpositions: true,
                        }
                    },
                }
            }
        })
Run Code Online (Sandbox Code Playgroud)

返回的值是:

"Pizza"
"Pineapple Pizza"
Run Code Online (Sandbox Code Playgroud)

这是预期的。但是,如果我在查询中输入值“Pineapple Pizza”:

        client.search({
            index: 'food_index',
            body: {
                query: {
                    fuzzy: {
                        name: {
                            value: "Pineapple Pizza",
                            transpositions: true,
                        }
                    },
                }
            }
        })
Run Code Online (Sandbox Code Playgroud)

返回的值是:

""
Run Code Online (Sandbox Code Playgroud)

空的

这是为什么?它应该是完全匹配的。我正在考虑将所有包含空格的名称切换为下划线。所以“Pineapple Pizza”将是“Pineapple_Pizza”(这个解决方案对我有用)。但我问这个问题是希望找到更好的选择。我在这里做错了什么?

javascript search fuzzy-search node.js elasticsearch

6
推荐指数
1
解决办法
2137
查看次数

Postgres 全文搜索和拼写错误(又名模糊全文搜索)

我有一个场景,我有需要能够搜索的非正式通信数据。因此,我想要全文搜索,但我也要弄清楚拼写错误。问题是如何考虑拼写错误以便能够进行模糊全文搜索?

这在Postgres Full Text Search is Good Enough非常简要地讨论过,该文章讨论了拼写错误。

所以我建立了一个“文档”表,创建了索引等。

CREATE TABLE data (
  id int GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, 
  text TEXT NOT NULL);
Run Code Online (Sandbox Code Playgroud)

我可以创建一个额外的 tsvector 类型的列并相应地索引......

alter table data 
  add column search_index tsvector 
  generated always as (to_tsvector('english', coalesce(text, ''))) 
  STORED;

create index search_index_idx on data using gin (search_index);
Run Code Online (Sandbox Code Playgroud)

例如,我有一些文本,其中数据显示“气球”,但有人可能会搜索“气球”,所以我插入了两行(一排故意拼错)...

insert into data (text) values ('baloon');
insert into data (text) values ('balloon');

select * from data;

id |  text   | search_index
----+---------+--------------
 1 | …
Run Code Online (Sandbox Code Playgroud)

postgresql full-text-search fuzzy-search

6
推荐指数
1
解决办法
1989
查看次数

在进行文本相似度评分时如何矢量化和加速 pandas 数据帧的双 for 循环

我有以下数据框:

d_test = {
    'name' : ['South Beach', 'Dog', 'Bird', 'Ant', 'Big Dog', 'Beach', 'Dear', 'Cat'],
    'cluster_number' : [1, 2, 3, 3, 2, 1, 4, 2]
}
df_test = pd.DataFrame(d_test)
Run Code Online (Sandbox Code Playgroud)

我想识别name列中相似的名称(如果这些名称属于一个簇编号)并为它们创建唯一的 ID。例如South BeachBeach属于簇号1,它们的相似度得分相当高。所以我们将它与唯一的 id 关联起来,比如说1。下一个簇是数字2,列中的三个实体name属于该簇:DogBig DogCatDog并且Big Dog具有很高的相似度分数,并且他们的唯一 ID 将是,比如说2。对于Cat唯一的 id 来说,是3。等等。

我为上面的逻辑创建了一个代码:

# pip install thefuzz
from thefuzz import fuzz …
Run Code Online (Sandbox Code Playgroud)

python fuzzy-search vectorization pandas fuzzywuzzy

6
推荐指数
1
解决办法
704
查看次数