Hướng dẫn python spell checker - kiểm tra chính tả python

Show

Trong bài viết này, chúng tôi sẽ khám phá cách sửa lỗi chính tả của các từ và câu bằng Python

Ảnh của Brett Jordan trên unplash

Trong bài viết này, chúng tôi sẽ khám phá cách sửa lỗi chính tả của các từ và câu bằng Python.

Mục lục

  • Giới thiệu
  • Chính tả chính xác của một từ sử dụng python
  • Chính tả chính xác của một câu bằng cách sử dụng Python
  • Sự kết luận

Giới thiệu

Chính tả chính xác của một từ sử dụng python

Chính tả chính xác của một câu bằng cách sử dụng Python

Sự kết luận

Chúng tôi đã giới thiệu chủ đề về trình kiểm tra chính tả trong Python trong một trong những bài viết trước.

Mặc dù chỉ cần kiểm tra các lỗi chính tả là một công cụ hữu ích, một ví dụ áp dụng hơn về những gì mà thực sự được sử dụng trong các dự án là các chương trình thực hiện sửa lỗi chính tả.

pip install textblob

Chính tả chính xác của một từ sử dụng python

Chính tả chính xác của một câu bằng cách sử dụng Python

Sự kết luận

Chúng tôi đã giới thiệu chủ đề về trình kiểm tra chính tả trong Python trong một trong những bài viết trước. is a simple word representation from the textblob library which has many useful methods, especially for correcting the spelling.

Mặc dù chỉ cần kiểm tra các lỗi chính tả là một công cụ hữu ích, một ví dụ áp dụng hơn về những gì mà thực sự được sử dụng trong các dự án là các chương trình thực hiện sửa lỗi chính tả.

Sử dụng Python, chúng ta có thể sửa chữa chính tả nhanh chóng và hiệu quả của các từ và câu khác nhau.

Để tiếp tục làm theo hướng dẫn này, chúng tôi sẽ cần thư viện Python sau: TextBlob.

Nếu bạn không cài đặt nó, vui lòng mở lệnh nhắc lệnh (trên Windows) và cài đặt nó bằng mã sau:

apple

Trong phần này, chúng tôi sẽ khám phá cách sửa lỗi chính tả của một từ bằng Python.

Bước 1: Nhập các phụ thuộc cần thiết

Word () là một biểu diễn từ đơn giản từ thư viện TextBlob có nhiều phương thức hữu ích, đặc biệt là để sửa lỗi chính tả.

'apple'

Chính tả chính xác của một câu bằng cách sử dụng Python

Chính tả chính xác của một câu bằng cách sử dụng Python

Sự kết luận

Chúng tôi đã giới thiệu chủ đề về trình kiểm tra chính tả trong Python trong một trong những bài viết trước. is a simple text block representation from the library which has many useful methods, especially for correcting the spelling.

Mặc dù chỉ cần kiểm tra các lỗi chính tả là một công cụ hữu ích, một ví dụ áp dụng hơn về những gì mà thực sự được sử dụng trong các dự án là các chương trình thực hiện sửa lỗi chính tả.

Sử dụng Python, chúng ta có thể sửa chữa chính tả nhanh chóng và hiệu quả của các từ và câu khác nhau.

Nếu bạn không cài đặt nó, vui lòng mở lệnh nhắc lệnh (trên Windows) và cài đặt nó bằng mã sau:

A sentence to check!

Trong phần này, chúng tôi sẽ khám phá cách sửa lỗi chính tả của một từ bằng Python.

Bước 1: Nhập các phụ thuộc cần thiết

Word () là một biểu diễn từ đơn giản từ thư viện TextBlob có nhiều phương thức hữu ích, đặc biệt là để sửa lỗi chính tả.

A sentence to check!

Sự kết luận

Chúng tôi đã giới thiệu chủ đề về trình kiểm tra chính tả trong Python trong một trong những bài viết trước.

Mặc dù chỉ cần kiểm tra các lỗi chính tả là một công cụ hữu ích, một ví dụ áp dụng hơn về những gì mà thực sự được sử dụng trong các dự án là các chương trình thực hiện sửa lỗi chính tả.

Sử dụng pyenchant cơ bản

Sau khi được cài đặt, chức năng của Pyenchant có sẵn trong mô -đun Enchant.

Tạo và sử dụng các đối tượng từ điển

Đối tượng quan trọng nhất trong mô -đun pyenchant là đối tượng Dict, đại diện cho một từ điển. Những đối tượng này được sử dụng để kiểm tra chính tả của các từ và để nhận được đề xuất cho các từ sai chính tả. Những điều sau đây cho thấy cách xây dựng một

'apple'
5 đơn giản và sử dụng nó để kiểm tra một số từ:

>>> import enchant
>>> d = enchant.Dict("en_US")
>>> d.check("Hello")
True
>>> d.check("Helo")
False

Từ điển được tạo bằng cách sử dụng một thẻ ngôn ngữ chỉ định ngôn ngữ cần kiểm tra - trong trường hợp này là, EN en_us có nghĩa là tiếng Anh Mỹ. Nếu thẻ ngôn ngữ không được chỉ định, một nỗ lực được thực hiện để xác định ngôn ngữ hiện đang được sử dụng. Điều này không phải lúc nào cũng có thể, trong trường hợp đó một lỗi được nêu ra.

Khi ngôn ngữ hiện tại có thể được xác định, nó hoạt động như sau:

>>> d = enchant.Dict()
>>> d.tag
'en_AU'
>>> print(d.tag)
en_AU

Tất nhiên, điều này vẫn có thể thất bại nếu từ điển thích hợp không có sẵn. Nếu không thể xác định được, hành vi như sau:

>>> d = enchant.Dict()
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "enchant/__init__.py", line 467, in __init__
    raise Error(err)
enchant.Error: No tag specified and default language could not be determined.

Có một số chức năng cấp cao nhất trong mô-đun Enchant có thể được sử dụng để xử lý từ điển:

  • 'apple'
    6: Kiểm tra xem có sẵn một ngôn ngữ không

  • 'apple'
    7: Xây dựng và trả về một đối tượng Dict mới

  • 'apple'
    8: Liệt kê các ngôn ngữ mà các dicts có sẵn

>>> enchant.dict_exists("fake")
False
>>> enchant.dict_exists("en_US")
True
>>> d = enchant.request_dict("en_US")
>>> d
<enchant.Dict object at 0x2aaaabdffa50>cl
>>> enchant.list_languages()
['en', 'en_CA', 'en_GB', 'en_US', 'eo', 'fr', 'fr_CH', 'fr_FR']

Như được hiển thị trước đây, phương thức

'apple'
9 có thể được sử dụng để kiểm tra xem một từ có được đánh vần chính xác không. Để nhận được đề xuất cho một từ sai chính tả, hãy sử dụng phương thức đề xuất như được hiển thị bên dưới:

>>> d.suggest("Helo")
['He lo', 'He-lo', 'Hello', 'Helot', 'Help', 'Halo', 'Hell', 'Held', 'Helm', 'Hero', "He'll"]

Các đề xuất được trả lại trong một danh sách, được đặt hàng từ nhiều khả năng thay thế nhất có thể ít nhất.

Khi một hiệu chỉnh được thực hiện thành một từ bị bỏ lỡ, thường rất hữu ích khi lưu trữ sự điều chỉnh này theo một cách nào đó để sử dụng sau này. Đối tượng

'apple'
5 cung cấp một số phương thức để xử lý việc này:

  • A sentence to check!
    1: Lưu trữ một từ không được công nhận trong Từ điển cá nhân của người dùng để nó được công nhận là chính xác trong tương lai.

  • A sentence to check!
    2: Lưu trữ một từ được công nhận trong danh sách loại trừ cá nhân của người dùng, để nó được xác định là một lỗi trong tương lai.

  • A sentence to check!
    3: Lưu trữ một từ không được công nhận để nó được công nhận là chính xác trong khi đối tượng Dict vẫn đang được sử dụng.

  • A sentence to check!
    4: Lưu ý rằng một từ đã được sử dụng để thay thế một từ khác, có nghĩa là nó sẽ xuất hiện cao hơn trong danh sách các đề xuất trong tương lai.

Danh sách từ cá nhân

Các đối tượng Dict cũng có thể được sử dụng để kiểm tra các từ dựa trên danh sách tùy chỉnh các từ được quay chính xác được gọi là danh sách từ cá nhân. Đây chỉ đơn giản là một tệp liệt kê các từ cần xem xét, một từ trên mỗi dòng. Ví dụ sau đây tạo ra một đối tượng Dict cho danh sách từ cá nhân được lưu trữ trong MY MySwords.txt,:

apple
0

Danh sách từ cá nhân đối tượng Dict có thể được sử dụng theo cách tương tự như các đối tượng Dict tham chiếu một từ điển ngôn ngữ. Khi phương thức thêm đối tượng được gọi, các mục mới sẽ được nối xuống dưới cùng của tệp.

Pyenchant cũng cung cấp lớp

A sentence to check!
5 có thể được sử dụng để kết hợp từ điển ngôn ngữ và tệp danh sách từ cá nhân:

apple
1

Kiểm tra toàn bộ khối văn bản

Mặc dù các đối tượng

A sentence to check!
6 rất hữu ích cho việc kiểm tra chính tả, chúng không thể được sử dụng trực tiếp để kiểm tra, ví dụ, toàn bộ một đoạn văn. Mô -đun
A sentence to check!
7 cung cấp lớp
A sentence to check!
8 được thiết kế để xử lý nhiệm vụ này.

Các đối tượng Spellchecker được tạo theo cùng một cách với các đối tượng Dict - bằng cách chuyển thẻ ngôn ngữ cho hàm tạo. Phương pháp

A sentence to check!
9 được sử dụng để đặt văn bản sẽ được kiểm tra. Khi điều này được thực hiện, đối tượng kiểm tra chính tả có thể được sử dụng như một trình lặp lại so với các lỗi chính tả trong văn bản. Điều này được minh họa tốt nhất bằng một ví dụ đơn giản. Mã sau sẽ in ra các lỗi gặp phải trong một chuỗi:

apple
2

Trình kiểm tra chính tả có thể sử dụng các bộ lọc để bỏ qua các biểu mẫu từ nhất định, bằng cách chuyển danh sách các bộ lọc trong đối số từ khóa:

apple
3

Mô hình Iterator có thể được sử dụng để thực hiện nhiều chức năng kiểm tra chính tả. Như các ví dụ về cách thực hiện điều này, Pyenchant cung cấp hộp thoại kiểm tra chính tả dựa trên WXPython và chương trình kiểm tra chính tả dòng lệnh. Mặc dù dự định chủ yếu là bản demo chức năng, nhưng chúng cũng khá hữu ích theo cách riêng của chúng.

WxSpellCheckerDialog

Mô -đun

A sentence to check!
0 cung cấp lớp
A sentence to check!
1 có thể được sử dụng để kiểm tra tương tác chính tả của một số văn bản. Mã bên dưới cho thấy cách tạo và sử dụng hộp thoại như vậy từ trong ứng dụng WxPython.

Nó sẽ xuất hiện một hộp thoại đánh vần đơn giản như đoạn nào được hiển thị ở đây. Mỗi lỗi chính tả được tô sáng lần lượt, với các nút cung cấp một loạt các tùy chọn cho cách xử lý lỗi:

  • Bỏ qua: Bỏ qua sự xuất hiện hiện tại của từ

  • Bỏ qua tất cả: Bỏ qua hiện tại và tất cả các sự kiện trong tương lai của từ

  • Thay thế: Thay thế sự xuất hiện hiện tại bằng từ đã sửa

  • Thay thế tất cả: Thay thế các sự kiện hiện tại và tất cả các lần xuất hiện bằng từ đã sửa

  • Thêm: Thêm từ vào Từ điển cá nhân của người dùng

apple
4

CMDLineChecker

Mô -đun

A sentence to check!
2 cung cấp lớp
A sentence to check!
3 có thể được sử dụng để kiểm tra tương tác chính tả của một số văn bản. Nó sử dụng đầu vào tiêu chuẩn và đầu ra tiêu chuẩn để tương tác với người dùng thông qua giao diện dòng lệnh. Mã bên dưới cho thấy cách tạo và sử dụng lớp này từ bên trong ứng dụng Python, cùng với một phiên kiểm tra mẫu ngắn:

apple
5

Như được hiển thị trong ví dụ đơn giản này, CMDLineChecker in từng lỗi mà nó gặp phải, cùng với một danh sách các thay thế được đề xuất. Người dùng nhập hành vi mong muốn bằng cách sử dụng các lệnh chữ và số ngắn, như được giải thích bằng đầu ra của lệnh ‘trợ giúp.

Mã thông báo: chia văn bản thành các từ

Một nhiệm vụ quan trọng trong việc kiểm tra chính tả là chia một cơ thể của văn bản thành các từ cấu thành của nó, mỗi từ sau đó được truyền đến một đối tượng

'apple'
5 để kiểm tra. Pyenchant cung cấp mô -đun
A sentence to check!
5 để hỗ trợ nhiệm vụ này. Mục đích của mô -đun này là cung cấp chức năng mã thông báo phù hợp có thể được sử dụng để phân chia văn bản. Thông thường, tất cả những gì được yêu cầu là hàm
A sentence to check!
6:

apple
6

Như được hiển thị trong ví dụ trên, hàm

A sentence to check!
6 lấy thẻ ngôn ngữ làm đầu vào và trả về một lớp mã thông báo phù hợp với ngôn ngữ đó. Việc khởi tạo lớp này với một số văn bản trả về một trình lặp sẽ mang lại các từ có trong văn bản đó. Đây chính xác là cơ chế mà lớp
A sentence to check!
8 sử dụng nội bộ để chia văn bản thành một loạt các từ.

Các mục được tạo bởi tokenizer là bộ dữ liệu của biểu mẫu (từ, pos) trong đó từ là từ được tìm thấy và pos là vị trí trong chuỗi mà từ đó bắt đầu.

Chunkers

Trong nhiều ứng dụng, văn bản có thể kiểm tra có thể được xen kẽ với một số loại đánh dấu (ví dụ: thẻ HTML) không cần kiểm tra. Để có mã thông báo chỉ trả về những từ nên được kiểm tra, nó có thể được tăng cường với một hoặc nhiều chunker.

Một chunker chỉ đơn giản là một hàm mã thông báo đặc biệt chia văn bản thành các phần lớn thay vì mã thông báo cá nhân. Chúng thường được sử dụng bằng cách chuyển một danh sách các chunker cho chức năng

A sentence to check!
6:

apple
7

Khi

>>> import enchant
>>> d = enchant.Dict("en_US")
>>> d.check("Hello")
True
>>> d.check("Helo")
False
0 được áp dụng cho tokenizer, thẻ và nội dung của nó sẽ bị xóa khỏi danh sách các từ.

Hiện tại chunker duy nhất được triển khai là

>>> import enchant
>>> d = enchant.Dict("en_US")
>>> d.check("Hello")
True
>>> d.check("Helo")
False
0. Một chunker cho các tài liệu latex là trong công trình.

Bộ lọc

Trong nhiều ứng dụng, thông thường việc kiểm tra chính tả để bỏ qua các từ có một hình thức nhất định. Ví dụ: khi tự kiểm tra một email, thông thường bỏ qua các địa chỉ email và URL. Điều này có thể đạt được bằng cách tăng cường quá trình mã thông báo với các bộ lọc.

Một bộ lọc chỉ đơn giản là một trình bao bọc xung quanh một tokenizer có thể (1) thả một số từ nhất định từ luồng và (2) tiếp tục chia các từ thành phụ. Chúng thường được sử dụng bằng cách chuyển danh sách các bộ lọc cho hàm

A sentence to check!
6:

apple
8

Khi

>>> import enchant
>>> d = enchant.Dict("en_US")
>>> d.check("Hello")
True
>>> d.check("Helo")
False
3 được áp dụng cho tokenizer, địa chỉ email sẽ bị xóa khỏi danh sách các từ.

Các bộ lọc hiện đang được triển khai là

>>> import enchant
>>> d = enchant.Dict("en_US")
>>> d.check("Hello")
True
>>> d.check("Helo")
False
3,
>>> import enchant
>>> d = enchant.Dict("en_US")
>>> d.check("Hello")
True
>>> d.check("Helo")
False
5 và
>>> import enchant
>>> d = enchant.Dict("en_US")
>>> d.check("Hello")
True
>>> d.check("Helo")
False
6.

Sử dụng pyenchant nâng cao

Nhà cung cấp

Mô hình lập trình cơ bản được cung cấp bởi thư viện Enchant dựa trên khái niệm của các nhà cung cấp. Nhà cung cấp là một đoạn mã cung cấp các dịch vụ kiểm tra chính tả mà Enchant có thể sử dụng để thực hiện công việc của mình. Các nhà cung cấp khác nhau tồn tại để thực hiện kiểm tra chính tả bằng cách sử dụng các khung khác nhau - ví dụ: có một nhà cung cấp ASPELL và nhà cung cấp MySpell.

Theo cách này, Enchant tạo thành một trình bao bọc của người Viking xung quanh các công cụ kiểm tra chính tả hiện có để cung cấp một giao diện lập trình chung.

Nhà cung cấp đang quản lý một đối tượng

'apple'
5 cụ thể có thể được xác định bằng cách truy cập thuộc tính nhà cung cấp của nó. Đây là đối tượng
>>> import enchant
>>> d = enchant.Dict("en_US")
>>> d.check("Hello")
True
>>> d.check("Helo")
False
8 với các thuộc tính
>>> import enchant
>>> d = enchant.Dict("en_US")
>>> d.check("Hello")
True
>>> d.check("Helo")
False
9,
>>> d = enchant.Dict()
>>> d.tag
'en_AU'
>>> print(d.tag)
en_AU
0 và
>>> d = enchant.Dict()
>>> d.tag
'en_AU'
>>> print(d.tag)
en_AU
1:

apple
9

Môi giới

Các chi tiết mà nhà cung cấp được sử dụng để tạo một từ điển cụ thể được quản lý bởi một đối tượng

>>> d = enchant.Dict()
>>> d.tag
'en_AU'
>>> print(d.tag)
en_AU
2. Các đối tượng như vậy có các phương thức tạo từ điển và kiểm tra xem một từ điển cụ thể có tồn tại hay không, như được hiển thị trong ví dụ dưới đây:

'apple'
0

Các nhà môi giới cũng có phương thức

>>> d = enchant.Dict()
>>> d.tag
'en_AU'
>>> print(d.tag)
en_AU
3 xác định nhà cung cấp nào có sẵn và phương thức
>>> d = enchant.Dict()
>>> d.tag
'en_AU'
>>> print(d.tag)
en_AU
4 liệt kê các từ điển có sẵn thông qua mỗi nhà cung cấp:

'apple'
1

Người môi giới mặc định

Trong sử dụng bình thường, chức năng được cung cấp bởi các nhà môi giới không hữu ích cho lập trình viên. Để làm cho công việc của lập trình viên dễ dàng hơn, Pyenchant tạo ra một đối tượng

>>> d = enchant.Dict()
>>> d.tag
'en_AU'
>>> print(d.tag)
en_AU
2 mặc định và sử dụng nó bất cứ khi nào một người không được đưa ra một cách rõ ràng. Ví dụ, nhà môi giới mặc định được sử dụng khi tạo trực tiếp các đối tượng từ điển. Đối tượng này có sẵn là
>>> d = enchant.Dict()
>>> d.tag
'en_AU'
>>> print(d.tag)
en_AU
6:

'apple'
2

Bạn có thể nhận thấy rằng các chức năng cấp cao nhất được cung cấp bởi mô-đun Enchant (chẳng hạn như

'apple'
7,
'apple'
6 và
'apple'
8) khớp với các phương thức được cung cấp bởi lớp
>>> d = enchant.Dict()
>>> d.tag
'en_AU'
>>> print(d.tag)
en_AU
2. Trên thực tế, các chức năng này là các phương thức thể hiện của đối tượng
>>> d = enchant.Dict()
>>> d.tag
'en_AU'
>>> print(d.tag)
en_AU
2 mặc định:

'apple'
3

Nhà cung cấp đặt hàng

Nhà cung cấp nào được sử dụng cho ngôn ngữ được xác định bởi lệnh của nhà cung cấp

>>> d = enchant.Dict()
>>> d.tag
'en_AU'
>>> print(d.tag)
en_AU
2. Điều này có thể được thay đổi bằng phương pháp
>>> d = enchant.Dict()
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "enchant/__init__.py", line 467, in __init__
    raise Error(err)
enchant.Error: No tag specified and default language could not be determined.
3. Phương pháp này chấp nhận một thẻ ngôn ngữ và danh sách các tên nhà cung cấp được phân tách bằng dấu phẩy theo thứ tự mà chúng nên được kiểm tra. Một thẻ ngôn ngữ của Hồi*, có nghĩa là việc đặt hàng phải là mặc định cho tất cả các ngôn ngữ mà không được đặt hàng rõ ràng.

Ví dụ sau đây nói rằng đối với tiếng Anh Mỹ, nhà cung cấp MySpell nên được xét xử trước, tiếp theo là nhà cung cấp ASPELL. Đối với tất cả các ngôn ngữ khác, việc đặt hàng được đảo ngược:

'apple'
4

Người dùng cũng có thể đặt thứ tự ưa thích của họ bằng các tệp cấu hình Enchant. Vì lý do này, các lập trình viên ứng dụng không được khuyến khích thiết lập đơn đặt hàng một cách rõ ràng trừ khi có một lý do thuyết phục để làm như vậy.

Mở rộng Enchant.Tokenize

Như đã giải thích ở trên, mô -đun

A sentence to check!
5 cung cấp khả năng chia văn bản thành các từ thành phần của nó. Việc triển khai hiện tại chỉ dựa trên các quy tắc cho ngôn ngữ tiếng Anh và do đó có thể không hoàn toàn phù hợp với ngôn ngữ bạn chọn. May mắn thay, thật đơn giản để mở rộng chức năng của mô -đun này.

Để thực hiện thói quen mã hóa mới cho thẻ ngôn ngữ, chỉ cần tạo một lớp/mã hóa chức năng trong mô -đun enchant.Tokenize .. Hàm này sẽ tự động được phát hiện bởi hàm mô -đun

A sentence to check!
6 và được sử dụng khi thích hợp. Cách dễ nhất để thực hiện điều này là sao chép mô -đun
>>> d = enchant.Dict()
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "enchant/__init__.py", line 467, in __init__
    raise Error(err)
enchant.Error: No tag specified and default language could not be determined.
6 và sửa đổi nó cho phù hợp với nhu cầu của bạn.

Tác giả sẽ rất biết ơn các thói quen token hóa cho các ngôn ngữ khác ngoài tiếng Anh có thể được kết hợp trở lại vào phân phối pyenchant chính.