Regex khớp mờ Python

Giao diện người dùng bình/trình quét web để tìm hợp đồng biểu diễn/buổi hòa nhạc cho nghệ sĩ đầu vào trên nhiều trang web. Bây giờ bao gồm trực quan hóa các địa điểm biểu diễn

music jar webscraper pandas yêu cầu khớp mờ bing-maps ứng dụng webscraping bình hòa nhạc hợp đồng biểu diễn beautifulsoup4 bing-maps-api

  • Cập nhật ngày 17 tháng 1 năm 2022
  • con trăn

gitonthescene / csv-reconcile-geo

Sao 0

  • Mã số
  • Vấn đề
  • Yêu cầu kéo

Plugin chấm điểm cho csv-reconcile sử dụng khoảng cách trắc địa

khoa học dữ liệu openrefine định vị địa lý kết hợp mờ

  • Cập nhật16/11/2021
  • con trăn

Pratheebhak / thẻ sinh học

Sao 0

  • Mã số
  • Vấn đề
  • Yêu cầu kéo

Khai thác nhãn viết tay và gắn thẻ trên hình ảnh thực vật

phát hiện đối tượng khớp mờ nhận dạng văn bản viết tay nhận dạng thực thể

  • Cập nhật ngày 2 tháng 11 năm 2020
  • con trăn

patrick-llgc/fuzzy_match_company_name

Sao 0

  • Mã số
  • Vấn đề
  • Yêu cầu kéo

Kết hợp mờ hồ sơ công ty

kết hợp mờ

  • Cập nhật ngày 28 tháng 1 năm 2019
  • con trăn

haekalyulianto / Bank_Clustering

Sao 0

  • Mã số
  • Vấn đề
  • Yêu cầu kéo

Phân tích cụm ngân hàng

máy học phân cụm ngân hàng khớp mờ nhận dạng mẫu phân cụm kmeans

  • Cập nhật18/10/2022
  • con trăn

ZhensongQian / fuzzywuzzy

Sao 0

  • Mã số
  • Vấn đề
  • Yêu cầu kéo

Khớp chuỗi mờ (Điểm tương tự chuỗi mờ) trong Python

so khớp mờ

  • Cập nhật 10/11/2017
  • con trăn

gi-ba-bu / python-n-gram-tỷ lệ

Sao 0

  • Mã số
  • Vấn đề
  • Yêu cầu kéo

Phương pháp dựa trên N-gram để tính điểm tương tự

ngram kết hợp mờ trong python

  • Cập nhậtNgày 17 tháng 5 năm 2022
  • con trăn

aaaaaaaalesha/fuzzy_docmarking_tool

Sao 0

  • Mã số
  • Vấn đề
  • Yêu cầu kéo

Инструмент для маркировки документов на основе нечёткого хеша

tập tin so sánh định danh khớp mờ ssdeep

  • Cập nhật ngày 19 tháng 7 năm 2022
  • con trăn

azzubair01 / Đa ngôn ngữ_Tên_Matching

Sao 0

  • Mã số
  • Vấn đề
  • Yêu cầu kéo

🐧Kho lưu trữ này được sử dụng để tìm các chuỗi khớp với một mẫu xấp xỉ trên các ngôn ngữ. Trong dự án này, chúng tôi đã đào tạo, hoàn thiện và thử nghiệm mô hình so khớp mờ cho bốn ngôn ngữ phổ biến ở Malaysia như tiếng Mã Lai, tiếng Ả Rập, tiếng Quan Thoại và tiếng Tamil

khớp mờ xử lý ngôn ngữ tự nhiên

  • Cập nhật24 tháng 6 năm 2021
  • con trăn

paul duchesne / filmography-matching

Sao 1

  • Mã số
  • Vấn đề
  • Yêu cầu kéo

Đối sánh người tạo giữa các bộ dữ liệu phim ảnh

phim phù hợp mờ

  • Cập nhật ngày 9 tháng 2 năm 2022
  • con trăn

ripxorip / vim-tc-explorer

Sao 0

  • Mã số
  • Vấn đề
  • Yêu cầu kéo

Trình quản lý tệp "bộ lọc theo kiểu bạn" phù hợp mờ cho neovim với hương vị của Total Commander

vim neovim nhanh vim-plugin công cụ tìm vim-plugins kết hợp mờ

Đầu tiên, chúng ta có thể dễ dàng tìm thấy một hoặc nhiều đối sánh chính xác cho một mẫu trên văn bản bằng cách sử dụng biểu thức chính quy của biểu mẫu

import re

txt = 'The sin eater was a tradition whereby a poor individual – the sin eater – would.. '

_q = 'sin eater'

for m in re.finditer(_q, txt):
    print(f'{_q}: ', m.start(), m.end())

Nhưng nếu chúng ta muốn bắt đầu tìm các mẫu trong đó ba chỉ khớp một phần thì sao?

Gói

# Crib from https://github.com/simonw/datasette-jellyfish

import jellyfish

one_args = (
    # Phonetic
    # https://jellyfish.readthedocs.io/en/latest/phonetic.html
    "soundex",
    "metaphone",
    "nysiis",
    "match_rating_codex",
    # Stemming
    # https://jellyfish.readthedocs.io/en/latest/stemming.html
    "porter_stem",
)
two_args = (
    # String Comparison
    # https://jellyfish.readthedocs.io/en/latest/comparison.html
    "levenshtein_distance",
    "damerau_levenshtein_distance",
    "hamming_distance",
    "jaro_similarity",
    "jaro_winkler_similarity",
    "match_rating_comparison",
)

# `db` is a sqlite_utils Database object
from sqlite_utils import Database
db = Database('test.db')
# For in memory db, use: db = Database(memory=True)

for fn in one_args:
    db.conn.create_function(fn, 1, getattr(jellyfish, fn))
for fn in two_args:
    db.conn.create_function(fn, 2, getattr(jellyfish, fn))
1 Python cung cấp các chức năng mã hóa ngữ âm (American Soundex, Metaphone, NYSIIS (Hệ thống thông tin và nhận dạng bang New York), Match Rating Codex) và so sánh chuỗi/khớp gần đúng (Khoảng cách Levenshtein, Khoảng cách Damerau-Levenshtein, Khoảng cách Jaro, Khoảng cách Jaro-

Cribbing

# Crib from https://github.com/simonw/datasette-jellyfish

import jellyfish

one_args = (
    # Phonetic
    # https://jellyfish.readthedocs.io/en/latest/phonetic.html
    "soundex",
    "metaphone",
    "nysiis",
    "match_rating_codex",
    # Stemming
    # https://jellyfish.readthedocs.io/en/latest/stemming.html
    "porter_stem",
)
two_args = (
    # String Comparison
    # https://jellyfish.readthedocs.io/en/latest/comparison.html
    "levenshtein_distance",
    "damerau_levenshtein_distance",
    "hamming_distance",
    "jaro_similarity",
    "jaro_winkler_similarity",
    "match_rating_comparison",
)

# `db` is a sqlite_utils Database object
from sqlite_utils import Database
db = Database('test.db')
# For in memory db, use: db = Database(memory=True)

for fn in one_args:
    db.conn.create_function(fn, 1, getattr(jellyfish, fn))
for fn in two_args:
    db.conn.create_function(fn, 2, getattr(jellyfish, fn))
2, một plugin Datasette bổ sung các hàm
# Crib from https://github.com/simonw/datasette-jellyfish

import jellyfish

one_args = (
    # Phonetic
    # https://jellyfish.readthedocs.io/en/latest/phonetic.html
    "soundex",
    "metaphone",
    "nysiis",
    "match_rating_codex",
    # Stemming
    # https://jellyfish.readthedocs.io/en/latest/stemming.html
    "porter_stem",
)
two_args = (
    # String Comparison
    # https://jellyfish.readthedocs.io/en/latest/comparison.html
    "levenshtein_distance",
    "damerau_levenshtein_distance",
    "hamming_distance",
    "jaro_similarity",
    "jaro_winkler_similarity",
    "match_rating_comparison",
)

# `db` is a sqlite_utils Database object
from sqlite_utils import Database
db = Database('test.db')
# For in memory db, use: db = Database(memory=True)

for fn in one_args:
    db.conn.create_function(fn, 1, getattr(jellyfish, fn))
for fn in two_args:
    db.conn.create_function(fn, 2, getattr(jellyfish, fn))
3 vào truy vấn SQLite trong tập dữ liệu mà chúng tôi có thể sử dụng ít nhất trong phần
# Crib from https://github.com/simonw/datasette-jellyfish

import jellyfish

one_args = (
    # Phonetic
    # https://jellyfish.readthedocs.io/en/latest/phonetic.html
    "soundex",
    "metaphone",
    "nysiis",
    "match_rating_codex",
    # Stemming
    # https://jellyfish.readthedocs.io/en/latest/stemming.html
    "porter_stem",
)
two_args = (
    # String Comparison
    # https://jellyfish.readthedocs.io/en/latest/comparison.html
    "levenshtein_distance",
    "damerau_levenshtein_distance",
    "hamming_distance",
    "jaro_similarity",
    "jaro_winkler_similarity",
    "match_rating_comparison",
)

# `db` is a sqlite_utils Database object
from sqlite_utils import Database
db = Database('test.db')
# For in memory db, use: db = Database(memory=True)

for fn in one_args:
    db.conn.create_function(fn, 1, getattr(jellyfish, fn))
for fn in two_args:
    db.conn.create_function(fn, 2, getattr(jellyfish, fn))
4 của truy vấn, chúng tôi có thể thêm các hàm vào SQLite bằng cách sau

# Crib from https://github.com/simonw/datasette-jellyfish

import jellyfish

one_args = (
    # Phonetic
    # https://jellyfish.readthedocs.io/en/latest/phonetic.html
    "soundex",
    "metaphone",
    "nysiis",
    "match_rating_codex",
    # Stemming
    # https://jellyfish.readthedocs.io/en/latest/stemming.html
    "porter_stem",
)
two_args = (
    # String Comparison
    # https://jellyfish.readthedocs.io/en/latest/comparison.html
    "levenshtein_distance",
    "damerau_levenshtein_distance",
    "hamming_distance",
    "jaro_similarity",
    "jaro_winkler_similarity",
    "match_rating_comparison",
)

# `db` is a sqlite_utils Database object
from sqlite_utils import Database
db = Database('test.db')
# For in memory db, use: db = Database(memory=True)

for fn in one_args:
    db.conn.create_function(fn, 1, getattr(jellyfish, fn))
for fn in two_args:
    db.conn.create_function(fn, 2, getattr(jellyfish, fn))

Các chức năng đặt giá trị mặc định cho tham số có thể được xác định bằng cách sử dụng

# Crib from https://github.com/simonw/datasette-jellyfish

import jellyfish

one_args = (
    # Phonetic
    # https://jellyfish.readthedocs.io/en/latest/phonetic.html
    "soundex",
    "metaphone",
    "nysiis",
    "match_rating_codex",
    # Stemming
    # https://jellyfish.readthedocs.io/en/latest/stemming.html
    "porter_stem",
)
two_args = (
    # String Comparison
    # https://jellyfish.readthedocs.io/en/latest/comparison.html
    "levenshtein_distance",
    "damerau_levenshtein_distance",
    "hamming_distance",
    "jaro_similarity",
    "jaro_winkler_similarity",
    "match_rating_comparison",
)

# `db` is a sqlite_utils Database object
from sqlite_utils import Database
db = Database('test.db')
# For in memory db, use: db = Database(memory=True)

for fn in one_args:
    db.conn.create_function(fn, 1, getattr(jellyfish, fn))
for fn in two_args:
    db.conn.create_function(fn, 2, getattr(jellyfish, fn))
5. Các hàm này có thể có 1, 2 hoặc 3 tham số

Sau đó, chúng ta có thể sử dụng hàm như một phần của truy vấn

# `db` is a sqlite_utils Database object
db["my_table"].create({"id": int, "txt": str,}, pk="id")
db["my_table"].insert({"id":1, "txt": "sin eater in Wales."})
db["my_table"].insert({"id":2, "txt": "The bin eater."})

for i in db.query("SELECT txt, levenshtein_distance('sin eater', txt) AS dist FROM my_table WHERE levenshtein_distance('sin eater', txt) < 10"):
    print(i)

Điều này giới hạn chúng tôi trong việc “khớp chính xác” gần các cụm từ hoặc cụm từ bỏ sót, thay vì tìm các cụm từ gần bỏ sót trong một văn bản lớn hơn

Gói

# Crib from https://github.com/simonw/datasette-jellyfish

import jellyfish

one_args = (
    # Phonetic
    # https://jellyfish.readthedocs.io/en/latest/phonetic.html
    "soundex",
    "metaphone",
    "nysiis",
    "match_rating_codex",
    # Stemming
    # https://jellyfish.readthedocs.io/en/latest/stemming.html
    "porter_stem",
)
two_args = (
    # String Comparison
    # https://jellyfish.readthedocs.io/en/latest/comparison.html
    "levenshtein_distance",
    "damerau_levenshtein_distance",
    "hamming_distance",
    "jaro_similarity",
    "jaro_winkler_similarity",
    "match_rating_comparison",
)

# `db` is a sqlite_utils Database object
from sqlite_utils import Database
db = Database('test.db')
# For in memory db, use: db = Database(memory=True)

for fn in one_args:
    db.conn.create_function(fn, 1, getattr(jellyfish, fn))
for fn in two_args:
    db.conn.create_function(fn, 2, getattr(jellyfish, fn))
6 cung cấp một chức năng đơn giản để tìm các kết quả phù hợp dựa trên khoảng cách Levenshtein tối đa (
# Crib from https://github.com/simonw/datasette-jellyfish

import jellyfish

one_args = (
    # Phonetic
    # https://jellyfish.readthedocs.io/en/latest/phonetic.html
    "soundex",
    "metaphone",
    "nysiis",
    "match_rating_codex",
    # Stemming
    # https://jellyfish.readthedocs.io/en/latest/stemming.html
    "porter_stem",
)
two_args = (
    # String Comparison
    # https://jellyfish.readthedocs.io/en/latest/comparison.html
    "levenshtein_distance",
    "damerau_levenshtein_distance",
    "hamming_distance",
    "jaro_similarity",
    "jaro_winkler_similarity",
    "match_rating_comparison",
)

# `db` is a sqlite_utils Database object
from sqlite_utils import Database
db = Database('test.db')
# For in memory db, use: db = Database(memory=True)

for fn in one_args:
    db.conn.create_function(fn, 1, getattr(jellyfish, fn))
for fn in two_args:
    db.conn.create_function(fn, 2, getattr(jellyfish, fn))
7), số lần thay thế tối đa (
# Crib from https://github.com/simonw/datasette-jellyfish

import jellyfish

one_args = (
    # Phonetic
    # https://jellyfish.readthedocs.io/en/latest/phonetic.html
    "soundex",
    "metaphone",
    "nysiis",
    "match_rating_codex",
    # Stemming
    # https://jellyfish.readthedocs.io/en/latest/stemming.html
    "porter_stem",
)
two_args = (
    # String Comparison
    # https://jellyfish.readthedocs.io/en/latest/comparison.html
    "levenshtein_distance",
    "damerau_levenshtein_distance",
    "hamming_distance",
    "jaro_similarity",
    "jaro_winkler_similarity",
    "match_rating_comparison",
)

# `db` is a sqlite_utils Database object
from sqlite_utils import Database
db = Database('test.db')
# For in memory db, use: db = Database(memory=True)

for fn in one_args:
    db.conn.create_function(fn, 1, getattr(jellyfish, fn))
for fn in two_args:
    db.conn.create_function(fn, 2, getattr(jellyfish, fn))
8), số lần xóa/ký tự bị bỏ qua tối đa trong chuỗi con (
# Crib from https://github.com/simonw/datasette-jellyfish

import jellyfish

one_args = (
    # Phonetic
    # https://jellyfish.readthedocs.io/en/latest/phonetic.html
    "soundex",
    "metaphone",
    "nysiis",
    "match_rating_codex",
    # Stemming
    # https://jellyfish.readthedocs.io/en/latest/stemming.html
    "porter_stem",
)
two_args = (
    # String Comparison
    # https://jellyfish.readthedocs.io/en/latest/comparison.html
    "levenshtein_distance",
    "damerau_levenshtein_distance",
    "hamming_distance",
    "jaro_similarity",
    "jaro_winkler_similarity",
    "match_rating_comparison",
)

# `db` is a sqlite_utils Database object
from sqlite_utils import Database
db = Database('test.db')
# For in memory db, use: db = Database(memory=True)

for fn in one_args:
    db.conn.create_function(fn, 1, getattr(jellyfish, fn))
for fn in two_args:
    db.conn.create_function(fn, 2, getattr(jellyfish, fn))
9), số lần chèn/ký tự bị bỏ qua tối đa

#%pip install fuzzysearch
from fuzzysearch import find_near_matches

# search for 'PATTERN' with a maximum Levenshtein Distance of 2
find_near_matches('PATTERN', '---PATERN---PATEN----PATN--PATREN-', max_l_dist=2)

[Match(start=3, end=9, dist=1, matched='PATERN'),
 Match(start=12, end=17, dist=2, matched='PATEN'),
 Match(start=27, end=33, dist=2, matched='PATREN')]

Cũng có thể thú vị khi thử sử dụng hàm

# `db` is a sqlite_utils Database object
db["my_table"].create({"id": int, "txt": str,}, pk="id")
db["my_table"].insert({"id":1, "txt": "sin eater in Wales."})
db["my_table"].insert({"id":2, "txt": "The bin eater."})

for i in db.query("SELECT txt, levenshtein_distance('sin eater', txt) AS dist FROM my_table WHERE levenshtein_distance('sin eater', txt) < 10"):
    print(i)
1 để sử dụng trong truy vấn SQLite. Đây là một ví dụ tối thiểu

def find_near_matches2(*args, **kwargs):
    response = find_near_matches(*args, **kwargs, max_l_dist=3)
    if response:
        return response[0].matched
    return ''

# Make function available in SQLite queries
db.conn.create_function('find_near_matches2', 2, find_near_matches2)

# Try a query
for i in db.query("SELECT txt, find_near_matches('sin eater', txt) AS matched FROM my_table WHERE find_near_matches('sin eater', txt) !=''"):
    print(i)

"""
{'txt': 'The is a sin eater in Wales.', 'matched': 'sin eater'}
{'txt': 'The bin eater.', 'matched': 'in eater'}
"""

Câu hỏi là. chúng ta thực sự nên trả về cái gì từ hàm này?

Tham số chính là giá trị

# Crib from https://github.com/simonw/datasette-jellyfish

import jellyfish

one_args = (
    # Phonetic
    # https://jellyfish.readthedocs.io/en/latest/phonetic.html
    "soundex",
    "metaphone",
    "nysiis",
    "match_rating_codex",
    # Stemming
    # https://jellyfish.readthedocs.io/en/latest/stemming.html
    "porter_stem",
)
two_args = (
    # String Comparison
    # https://jellyfish.readthedocs.io/en/latest/comparison.html
    "levenshtein_distance",
    "damerau_levenshtein_distance",
    "hamming_distance",
    "jaro_similarity",
    "jaro_winkler_similarity",
    "match_rating_comparison",
)

# `db` is a sqlite_utils Database object
from sqlite_utils import Database
db = Database('test.db')
# For in memory db, use: db = Database(memory=True)

for fn in one_args:
    db.conn.create_function(fn, 1, getattr(jellyfish, fn))
for fn in two_args:
    db.conn.create_function(fn, 2, getattr(jellyfish, fn))
7;

def find_near_matches3(pattern, search_string, max_l_dist=3):
    response = find_near_matches(pattern, search_string, max_l_dist=max_l_dist)
    if response:
        return response[0].matched
    return ''

# The -1 value for the number of args says we may have a default.
# The function can then take 1, 2 or 3 arguments.
db.conn.create_function('find_near_matches3', -1, find_near_matches3)

Đối với

# `db` is a sqlite_utils Database object
db["my_table"].create({"id": int, "txt": str,}, pk="id")
db["my_table"].insert({"id":1, "txt": "sin eater in Wales."})
db["my_table"].insert({"id":2, "txt": "The bin eater."})

for i in db.query("SELECT txt, levenshtein_distance('sin eater', txt) AS dist FROM my_table WHERE levenshtein_distance('sin eater', txt) < 10"):
    print(i)
4, gói
# `db` is a sqlite_utils Database object
db["my_table"].create({"id": int, "txt": str,}, pk="id")
db["my_table"].insert({"id":1, "txt": "sin eater in Wales."})
db["my_table"].insert({"id":2, "txt": "The bin eater."})

for i in db.query("SELECT txt, levenshtein_distance('sin eater', txt) AS dist FROM my_table WHERE levenshtein_distance('sin eater', txt) < 10"):
    print(i)
5 cung cấp trích xuất thực thể mờ cho đường ống dẫn
# `db` is a sqlite_utils Database object
db["my_table"].create({"id": int, "txt": str,}, pk="id")
db["my_table"].insert({"id":1, "txt": "sin eater in Wales."})
db["my_table"].insert({"id":2, "txt": "The bin eater."})

for i in db.query("SELECT txt, levenshtein_distance('sin eater', txt) AS dist FROM my_table WHERE levenshtein_distance('sin eater', txt) < 10"):
    print(i)
4

import spacy
from spaczz.matcher import FuzzyMatcher

nlp = spacy.blank("en")
text = """SIB- EATERZ. The tradition of the sin eater is contested. 
Claimed as a Walesian tradition by the English, the Welsh didn't seem to have heard of sin-eating!"""
doc = nlp(text)

matcher = FuzzyMatcher(nlp.vocab)
matcher.add("GPE", [nlp("Wales")])
matches = matcher(doc)

for match_id, start, end, ratio in matches:
    print(match_id, doc[start:end], ratio)

"""
GPE Walesian 77
"""

Mức độ tin cậy tối thiểu mà mã thông báo được gắn thẻ có thể được định cấu hình

Chức năng đối sánh có thể được tùy chỉnh để trả về thông tin bổ sung, chẳng hạn như vị trí của (các) mục phù hợp trong văn bản

from spacy.tokens import Span

# Create custom matcher to return location in document
def add_name_ent(matcher, doc, i, matches):
    """Callback on match function. Adds "THING" entities to doc."""
    # Get the current match and create tuple of entity label, start and end.
    # Append entity to the doc's entity. (Don't overwrite doc.ents!)
    _match_id, start, end, _ratio = matches[i]
    entity = Span(doc, start, end, label="THING")
    doc.ents += (entity,)
    
matcher.add("THING", [nlp("sin eater")], on_match=add_name_ent)
matches = matcher(doc)

for ent in doc.ents:
    print((ent.text, ent.start, ent.end, ent.label_))

Trình so khớp regex cũng được hỗ trợ. Xem tài liệu để biết thêm các tính năng. Gói này chắc chắn xứng đáng được điều tra thêm

Điều đáng chú ý là gói Python

# `db` is a sqlite_utils Database object
db["my_table"].create({"id": int, "txt": str,}, pk="id")
db["my_table"].insert({"id":1, "txt": "sin eater in Wales."})
db["my_table"].insert({"id":2, "txt": "The bin eater."})

for i in db.query("SELECT txt, levenshtein_distance('sin eater', txt) AS dist FROM my_table WHERE levenshtein_distance('sin eater', txt) < 10"):
    print(i)
7 vốn hỗ trợ một loạt các tùy chọn có thể được sử dụng để tìm các kết quả khớp gần đúng cho phép một số lỗi xóa hoặc thay thế nhất định hoặc một số lỗi ký tự đơn nhất định thuộc bất kỳ loại nào.

# https://github.com/mrabarnett/mrab-regex
#%pip install --upgrade regex
import regex

#https://github.com/mrabarnett/mrab-regex#approximate-fuzzy-matching-hg-issue-12-hg-issue-41-hg-issue-109

print(regex.search("(sin eater){e<=1}", "The bin eater is...")) # Errors
print(regex.search("(sin eater){d<=1}", "The in eater is...")) # Deletions
print(regex.search("(sin eater){s<=1}", "The bin eater is...")) # Substitutions
print(regex.search("(sin eater){e<=3}", "The bin eating tradition is...")) # Errors

"""
<regex.Match object; span=(4, 13), match='bin eater', fuzzy_counts=(1, 0, 0)>
<regex.Match object; span=(4, 12), match='in eater', fuzzy_counts=(0, 0, 1)>
<regex.Match object; span=(4, 13), match='bin eater', fuzzy_counts=(1, 0, 0)>
<regex.Match object; span=(4, 13), match='bin eatin', fuzzy_counts=(3, 0, 0)>
"""

Ngoài ra còn có một tùy chọn đối sánh có thể được sử dụng đối với tài liệu bị cắt bớt, nếu mẫu đối sánh có thể đã khớp nếu tài liệu tiếp tục

Về việc sử dụng các hàm SQLite “gốc” để hỗ trợ tìm kiếm mờ, câu trả lời Stack Overflow gợi ý sử dụng tìm kiếm toàn văn cùng với bảng ảo

Chúng tôi có thể thêm phần mở rộng Spellfix vào SQLite db theo cách sau

#https://github.com/karlb/sqlite-spellfix
#%pip install git+git://github.com/karlb/sqlite-spellfix
import sqlite_spellfix

# The `db` object is a sqlite_utils Database object
db.conn.enable_load_extension(True)
db.conn.load_extension(sqlite_spellfix.extension_path())

Khi truy vấn các bảng đơn giản, ví dụ: một bảng có một cột dành cho các mục nhập chỉ mục trong một cuốn sách, hàm

# `db` is a sqlite_utils Database object
db["my_table"].create({"id": int, "txt": str,}, pk="id")
db["my_table"].insert({"id":1, "txt": "sin eater in Wales."})
db["my_table"].insert({"id":2, "txt": "The bin eater."})

for i in db.query("SELECT txt, levenshtein_distance('sin eater', txt) AS dist FROM my_table WHERE levenshtein_distance('sin eater', txt) < 10"):
    print(i)
8 sẽ khớp các cụm từ trong một “khoảng cách” quy định của cụm từ tìm kiếm

# Crib from https://github.com/simonw/datasette-jellyfish

import jellyfish

one_args = (
    # Phonetic
    # https://jellyfish.readthedocs.io/en/latest/phonetic.html
    "soundex",
    "metaphone",
    "nysiis",
    "match_rating_codex",
    # Stemming
    # https://jellyfish.readthedocs.io/en/latest/stemming.html
    "porter_stem",
)
two_args = (
    # String Comparison
    # https://jellyfish.readthedocs.io/en/latest/comparison.html
    "levenshtein_distance",
    "damerau_levenshtein_distance",
    "hamming_distance",
    "jaro_similarity",
    "jaro_winkler_similarity",
    "match_rating_comparison",
)

# `db` is a sqlite_utils Database object
from sqlite_utils import Database
db = Database('test.db')
# For in memory db, use: db = Database(memory=True)

for fn in one_args:
    db.conn.create_function(fn, 1, getattr(jellyfish, fn))
for fn in two_args:
    db.conn.create_function(fn, 2, getattr(jellyfish, fn))
0

Tuy nhiên, để khớp một cụm từ tìm kiếm trong một tài liệu dài hơn, chẳng hạn như sử dụng tìm kiếm thử nghiệm đầy đủ, yêu cầu tìm kiếm trên một bảng sửa lỗi chính tả ảo khác. Thử cái này/tạo một công thức hoạt động tối thiểu cho cái này, vẫn nằm trong danh sách việc cần làm của tôi. Xem ở đây cho một cái cũi có thể

Đánh giá điều này

Chia sẻ cái này

  • tiếng riu ríu

Như thế này

Thích Đang tải.

Có liên quan

Tác giả. Tony Hirst

Tôi là Giảng viên cao cấp tại Đại học Mở, quan tâm đến chính sách và thực tiễn #opendata, cũng như mày mò web nói chung. Xem tất cả các bài viết của Tony Hirst

RegEx mờ là gì?

RegEx mờ (còn được gọi là "khớp mờ" hoặc "chế độ mờ" hoặc thậm chí chỉ là "mờ") cho phép các mẫu biểu thức chính quy khớp với văn bản trong một tỷ lệ phần trăm tương tự đã đặt . Điều này có thể cho phép người dùng Grooper khắc phục các lỗi OCR không thể đoán trước khi trích xuất dữ liệu từ tài liệu. . This can allow Grooper users to overcome unpredictable OCR errors when extracting data from documents.

FuzzyWuzzy trong Python là gì?

Fuzzywuzzy là thư viện python sử dụng Khoảng cách Levenshtein để tính toán sự khác biệt giữa trình tự và mẫu do SeatGeek phát triển và cũng là mã nguồn mở .

Ví dụ so khớp mờ là gì?

So khớp mờ (còn gọi là So khớp chuỗi gần đúng) là một kỹ thuật giúp xác định hai thành phần văn bản, chuỗi hoặc mục nhập gần giống nhau nhưng không hoàn toàn giống nhau. Ví dụ: hãy lấy trường hợp của danh sách khách sạn ở New York do Expedia và Priceline hiển thị trong hình bên dưới .

Kết hợp mờ có tốt không?

Độ chính xác đối sánh cao hơn. đối sánh mờ chứng tỏ là một phương pháp chính xác hơn nhiều để tìm đối sánh trên hai hoặc nhiều bộ dữ liệu . Không giống như đối sánh xác định xác định đối sánh trên cơ sở 0 hoặc 1, đối sánh mờ có thể phát hiện các biến thể nằm trong khoảng từ 0 đến 1 trên ngưỡng đối sánh nhất định.