我在MongoDB中建立了一个庞大的银行数据库.我可以轻松地获取此信息并在其中创建索引.例如,我希望能够匹配银行名称'Eagle Bank&Trust Co of Missouri'和'Eagle Bank and Trust Company of Missouri'.以下代码适用于简单模糊这样,但无法实现上述匹配:
from whoosh.index import create_in
from whoosh.fields import *
schema = Schema(name=TEXT(stored=True))
ix = create_in("indexdir", schema)
writer = ix.writer()
test_items = [u"Eagle Bank and Trust Company of Missouri"]
writer.add_document(name=item)
writer.commit()
from whoosh.qparser import QueryParser
from whoosh.query import FuzzyTerm
with ix.searcher() as s:
qp = QueryParser("name", schema=ix.schema, termclass=FuzzyTerm)
q = qp.parse(u"Eagle Bank & Trust Co of Missouri")
results = s.search(q)
print results
Run Code Online (Sandbox Code Playgroud)
给我:
<Top 0 Results for And([FuzzyTerm('name', u'eagle', boost=1.000000, minsimilarity=0.500000, …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种编码lucene模糊查询的方法,该查询搜索与精确短语相关的所有文档.如果我搜索"mosa employee appreciata",将返回包含"大多数员工欣赏"的文档作为结果.
我试着用:
FuzzyQeury = new FuzzyQuery(new Term("contents","mosa employee appreicata"))
Run Code Online (Sandbox Code Playgroud)
不幸的是,它凭经验不起作用.FuzzyQuery采用编辑器距离,理论上,"mosa员工欣赏"应与"大多数员工欣赏"相匹配,提供适当的距离.这看起来有点奇怪.
有线索吗?谢谢.
希望我不要重复这个问题.我在这里做了一些搜索和google,然后发布在这里.
我正在运行带有SQL Server 2008R2并启用了全文的电子商店.
我正在使用混合全文和普通的搜索.这提供了更相关的结果.返回执行临时表和区别的所有查询.
匹配逻辑,
运行以下SQL以使用全文获取相关产品.但@Keywords将被预处理.说'CLC 2200'将更改为'CLC*AND 2200*'
SELECT Id FROM dbo.Product WHERE CONTAINS(TextSearch,@ Keywords)
另一个查询将使用普通的运行方式运行.所以'CLC 2200'将被预处理为'TextSearch like%clc%AND TextSearch like%2200%'.这仅仅是因为全文搜索不会在关键字之前搜索模式.例如,它不会返回'pclc 2200'.
SELECT Id FROM dbo.Product WHERE TextSearch喜欢'%clc%'和TextSearch喜欢'%2200%'
如果步骤1和2未返回任何记录,则将执行以下搜索.价值135由我调整为返回更多相关记录.
SELECT p.id FROM dbo.Product AS p INNER JOIN FREETEXTTABLE(product,TextSearch,@ Keywords)AS r ON p.Id = r.[KEY] WHERE r.RANK> 135
以上所有组合在合理的速度下工作正常,并返回关键字的相关产品.
但是,当我找不到任何产品时,我正在寻求进一步改进.
假如客户寻找'CLC 2200npk'并且该产品不在那里,我需要在'CLC 2200'附近展示.
到目前为止,我尝试使用Soundex()函数.购买TextSearch列中每个单词的计算soundex值,并与关键字的soudex值进行比较.但是这会返回太多记录并且也会减慢.
例如,'CLC 2200npk'将返回'CLC 1100'等产品.但这不是一个好结果.因为它不接近CLC 2200npk
还有另外一个好这里.但这使用CLR功能.但我无法在服务器上安装CLR功能.
所以我的逻辑需要,
如果'CLC 2200npk'未找到,如果'CLC 2200'未找到则显示'CLC 2200'附近,接下来显示'CLC 1100'
谢谢.
在Lucene查询语法中,我想在有效查询中组合*和〜,类似于:bla~*//无效查询
含义:请匹配以"bla"开头的单词或类似"bla"的单词.
更新:我现在所做的,适用于小输入,使用以下(SOLR模式的片段):
<fieldtype name="text_ngrams" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
Run Code Online (Sandbox Code Playgroud)
如果您不使用SOLR,则执行以下操作.
Indextime:通过创建包含my(短)输入的所有前缀的字段来索引数据.
搜索时间:仅使用〜运算符,因为前缀明确存在于索引中.
我有一个大型Oracle数据库表,其中包含整个国家/地区的街道名称,其中包含600000多行.在我的应用程序中,我将地址字符串作为输入,并想检查此地址字符串的特定子字符串是否与表中的一个或多个街道名称匹配,以便我可以将该地址子字符串标记为街道的名称.
显然,这应该是一个模糊的文本匹配问题,我查询的子字符串与DB表中的街道名称完全匹配的可能性很小.所以应该有某种模糊文本匹配方法.我正在尝试阅读http://docs.oracle.com/cd/B28359_01/text.111/b28303/query.htm中的Oracle文档,其中解释了CONTAINS和CATSEARCH搜索运算符.但这些似乎用于更复杂的任务,例如在文档中搜索给定字符串的匹配项.我只是想为表的一列做这件事.
在这种情况下,您对我的建议是什么,Oracle是否支持这种模糊文本匹配查询?
我有两个数据帧,每个数据帧都有不同的行数.下面是每个数据集的几行
df1 =
Company City State ZIP
FREDDIE LEES AMERICAN GOURMET SAUCE St. Louis MO 63101
CITYARCHRIVER 2015 FOUNDATION St. Louis MO 63102
GLAXOSMITHKLINE CONSUMER HEALTHCARE St. Louis MO 63102
LACKEY SHEET METAL St. Louis MO 63102
Run Code Online (Sandbox Code Playgroud)
和
df2 =
FDA Company FDA City FDA State FDA ZIP
LACKEY SHEET METAL St. Louis MO 63102
PRIMUS STERILIZER COMPANY LLC Great Bend KS 67530
HELGET GAS PRODUCTS INC Omaha NE 68127
ORTHOQUEST LLC La Vista NE 68128
Run Code Online (Sandbox Code Playgroud)
我和他们并肩使用combined_data = pandas.concat([df1, …
当我:Files在 fzf.vim 中使用时,它会搜索当前目录和子目录中的文件。当前工作目录是固定的。在下面的屏幕截图中,它是浅蓝色的。有没有办法动态更改运行 FZF 的工作目录?例如,如果我只是删除“Documents”路径,那么 FZF 从 ~ 而不是 ~/Documents 开始。
这种功能在 Emacs helm 包中是可能的,它允许通过 helm-execute-persistent-action 来实现。
我不确定模糊是否是说出这个的正确方法,所以请允许我解释一下我想做什么.
通常情况下,我正在寻找我知道的文件,这些文件位于我本地SVN工作副本的特定目录中,我知道它们所在的目录,但不想考虑精确路径或者可能在不同的分支中有几个副本.例如,假设我想要一个文件"eligibility.py",我知道它位于"trunk"目录下和某个名为"interface"的目录下.
如果我可以在任何for-for-files提示符下键入类似的内容,那将是理想的:
trunk interface eligibility.py
Run Code Online (Sandbox Code Playgroud)
有什么方法可以做类似的事吗?
我正在研究这个过滤的东西,我有大约50-100个列表项.每个项目都有这样的标记:
<li>
<input type="checkbox" name="services[]" value="service_id" />
<span class="name">Restaurant in NY</span>
<span class="filters"><!-- hidden area -->
<span class="city">@city: new york</span>
<span class="region">@reg: ny</span>
<span class="date">@start: 02/05/2012</span>
<span class="price">@price: 100</span>
</span>
</li>
Run Code Online (Sandbox Code Playgroud)
我创建了这样的标记因为我最初使用了List.js
所以,可能你已经猜到了,我想要的是做这样的搜索:@region: LA @price: 124等等.问题是我还想显示多个项目,以便选择超过......一个:)
我认为这需要模糊搜索,但问题是我找不到任何功能.
任何想法或起点?
//编辑:因为我有相当少量的项目,我想要一个客户端解决方案.
最常见的拼写错误的英文单词是两个或三个印刷错误(的取代的组合,内小号,插入我,还是信缺失d从他们正确的形式).即单词对中的错误absence - absense可以概括为具有1s,0i和0d.
可以使用to-replace-re regex python模块进行模糊匹配以查找单词及其拼写错误.
下表总结了从一些句子中对一个感兴趣的词进行模糊分段的尝试:
word在sentence允许最多2个错误时找到最佳匹配word匹配,sentence允许最多2个错误,同时尝试仅操作(我认为)整个单词word匹配,sentence允许最多2个错误,同时仅操作(我认为)整个单词.我错了.word匹配,sentence允许最多2个错误,而我(我认为)寻找匹配结束为单词边界我如何编写一个正则表达式,如果可能的话,在这些单词 - 句子对上消除假阳性和假阴性模糊匹配?
一种可能的解决方案是仅将句子中的单词(由空格包围的字符串或行的开头/结尾)与感兴趣的单词(主要单词)进行比较.如果主要单词和句子中的单词之间存在模糊匹配(e <= 2),则从句子中返回该完整单词(并且仅返回该单词).
将以下数据帧复制到剪贴板:
word sentence
0 cub cadet cub cadet 42
1 plastex vinyl panels
2 spt heat and air conditioner
3 closetmaid closetmaid
4 ryobi batteries kyobi
5 ryobi …Run Code Online (Sandbox Code Playgroud) fuzzy-search ×10
python ×3
lucene ×2
emacs ×1
fuzzywuzzy ×1
fzf ×1
javascript ×1
oracle ×1
pandas ×1
regex ×1
search ×1
sql ×1
sql-server ×1
vim ×1
vim-fzf ×1
whoosh ×1
wildcard ×1