Trình phân tích cú pháp ngôn ngữ Python

Nếu bạn muốn xử lý ngôn ngữ tự nhiên [NLP] bằng Python, thì không đâu khác ngoài spaCy, một thư viện nguồn mở và miễn phí với rất nhiều khả năng tích hợp sẵn. Nó ngày càng trở nên phổ biến để xử lý và phân tích dữ liệu trong lĩnh vực NLP

Văn bản phi cấu trúc được sản xuất bởi các công ty, chính phủ và người dân nói chung ở quy mô đáng kinh ngạc. Điều quan trọng là phải tự động hóa quá trình xử lý và phân tích văn bản mà con người không thể xử lý. Để tự động hóa quá trình xử lý và phân tích văn bản, bạn cần thể hiện văn bản ở định dạng mà máy tính có thể hiểu được. spaCy có thể giúp bạn làm điều đó

Trong hướng dẫn này, bạn sẽ học cách

  • Triển khai NLP trong spaCy
  • Tùy chỉnh và mở rộng các chức năng tích hợp trong spaCy
  • Thực hiện phân tích thống kê cơ bản trên một văn bản
  • Tạo một quy trình để xử lý văn bản phi cấu trúc
  • Phân tích một câu và trích xuất những hiểu biết có ý nghĩa từ nó

Nếu bạn chưa quen với NLP, đừng lo lắng. Trước khi bắt đầu sử dụng spaCy, trước tiên bạn sẽ tìm hiểu về các thuật ngữ và khái niệm cơ bản trong NLP. Tuy nhiên, bạn nên làm quen với những điều cơ bản trong Python. Mã trong hướng dẫn này chứa từ điển, danh sách, bộ dữ liệu, vòng lặp

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
4, khả năng hiểu, lập trình hướng đối tượng và hàm lambda, trong số các khái niệm Python cơ bản khác

Mã nguồn miễn phí. Nhấp vào đây để tải xuống mã nguồn miễn phí mà bạn sẽ sử dụng để xử lý ngôn ngữ tự nhiên [NLP] trong spaCy

Giới thiệu về NLP và spaCy

NLP là một lĩnh vực con của trí tuệ nhân tạo và tất cả là về việc cho phép máy tính hiểu được ngôn ngữ của con người. NLP liên quan đến việc phân tích, định lượng, hiểu và rút ra ý nghĩa từ các ngôn ngữ tự nhiên

Ghi chú. Hiện tại, các mô hình NLP mạnh mẽ nhất đều dựa trên máy biến áp. BERT của Google và OpenAI là những ví dụ về các mô hình như vậy

Kể từ khi phát hành phiên bản 3. 0, spaCy hỗ trợ các mô hình dựa trên máy biến áp. Các ví dụ trong hướng dẫn này được thực hiện với một mô hình nhỏ hơn, được tối ưu hóa cho CPU. Tuy nhiên, bạn có thể chạy các ví dụ thay thế. Tất cả các mẫu máy biến áp Hugging Face đều có thể được sử dụng với spaCy

NLP giúp bạn trích xuất thông tin chi tiết từ văn bản phi cấu trúc và có nhiều trường hợp sử dụng, chẳng hạn như

  • Tự động tóm tắt
  • Nhận dạng thực thể được đặt tên
  • Các hệ thống trả lời câu hỏi
  • phân tích tình cảm

spaCy là một thư viện mã nguồn mở, miễn phí dành cho NLP bằng Python được viết bằng Cython. spaCy được thiết kế để giúp dễ dàng xây dựng các hệ thống khai thác thông tin hoặc xử lý ngôn ngữ tự nhiên cho mục đích chung

Loại bỏ các quảng cáo

Cài đặt spaCy

Trong phần này, bạn sẽ cài đặt spaCy vào một môi trường ảo, sau đó tải xuống dữ liệu và mô hình cho ngôn ngữ tiếng Anh

Bạn có thể cài đặt spaCy bằng cách sử dụng

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
5, trình quản lý gói Python. Bạn nên sử dụng môi trường ảo để tránh phụ thuộc vào các gói trên toàn hệ thống. Để tìm hiểu thêm về môi trường ảo và
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
5, hãy xem Sử dụng pip của Python để quản lý các phần phụ thuộc của dự án và môi trường ảo Python. sơn lót

Đầu tiên, bạn sẽ tạo một môi trường ảo mới, kích hoạt nó và cài đặt spaCy. Chọn hệ điều hành của bạn bên dưới để tìm hiểu cách

PS> python -m venv venv
PS> ./venv/Scripts/activate
[venv] PS> python -m pip install spacy

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy

Với spaCy được cài đặt trong môi trường ảo của bạn, bạn gần như đã sẵn sàng để bắt đầu với NLP. Nhưng còn một thứ nữa bạn sẽ phải cài đặt

[venv] $ python -m spacy download en_core_web_sm

Có nhiều mô hình spaCy cho các ngôn ngữ khác nhau. Mô hình mặc định cho ngôn ngữ tiếng Anh được chỉ định là

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
7. Vì các mô hình khá lớn nên tốt nhất bạn nên cài đặt riêng chúng—bao gồm tất cả các ngôn ngữ trong một gói sẽ khiến quá trình tải xuống quá lớn

Khi mô hình

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
7 đã tải xuống xong, hãy mở REPL Python và xác minh rằng quá trình cài đặt đã thành công

>>>

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]

Nếu những dòng này chạy mà không có bất kỳ lỗi nào, điều đó có nghĩa là spaCy đã được cài đặt và các mô hình và dữ liệu đã được tải xuống thành công. Bây giờ bạn đã sẵn sàng đi sâu vào NLP với spaCy

Đối tượng
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
9 cho văn bản đã xử lý

Trong phần này, bạn sẽ sử dụng spaCy để giải cấu trúc một chuỗi đầu vào nhất định và bạn cũng sẽ đọc cùng một văn bản từ một tệp

Trước tiên, bạn cần tải phiên bản mô hình ngôn ngữ trong spaCy

>>>

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

Hàm

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

0 trả về một đối tượng
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

1, đối tượng này thường được gán cho một biến có tên là
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

2

Để bắt đầu xử lý đầu vào của bạn, bạn xây dựng một đối tượng

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
9. Một đối tượng
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
9 là một chuỗi gồm
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

5 đối tượng đại diện cho một. Mỗi đối tượng
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

5 có thông tin về một phần cụ thể—thường là một từ—của văn bản. Bạn có thể khởi tạo một đối tượng
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
9 bằng cách gọi đối tượng
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

1 với chuỗi đầu vào làm đối số

>>>

>>> introduction_doc = nlp[
..     "This tutorial is about Natural Language Processing in spaCy."
.. ]
>>> type[introduction_doc]
spacy.tokens.doc.Doc

>>> [token.text for token in introduction_doc]
['This', 'tutorial', 'is', 'about', 'Natural', 'Language',
'Processing', 'in', 'spaCy', '.']

Trong ví dụ trên, văn bản được sử dụng để khởi tạo một đối tượng

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
9. Từ đó, bạn có thể truy cập cả đống thông tin về văn bản đã xử lý

Chẳng hạn, bạn đã lặp lại đối tượng

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
9 với khả năng hiểu danh sách tạo ra một loạt đối tượng
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

5. Trên mỗi đối tượng
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

5, bạn đã gọi thuộc tính
>>> introduction_doc = nlp[
..     "This tutorial is about Natural Language Processing in spaCy."
.. ]
>>> type[introduction_doc]
spacy.tokens.doc.Doc

>>> [token.text for token in introduction_doc]
['This', 'tutorial', 'is', 'about', 'Natural', 'Language',
'Processing', 'in', 'spaCy', '.']
3 để lấy văn bản chứa trong mã thông báo đó

Tuy nhiên, thông thường bạn sẽ không sao chép và dán văn bản trực tiếp vào hàm tạo. Thay vào đó, bạn có thể sẽ đọc nó từ một tệp

>>>

>>> import pathlib
>>> file_name = "introduction.txt"
>>> introduction_doc = nlp[pathlib.Path[file_name].read_text[encoding="utf-8"]]
>>> print [[token.text for token in introduction_doc]]
['This', 'tutorial', 'is', 'about', 'Natural', 'Language',
'Processing', 'in', 'spaCy', '.', '\n']

Trong ví dụ này, bạn đọc nội dung của tệp

>>> introduction_doc = nlp[
..     "This tutorial is about Natural Language Processing in spaCy."
.. ]
>>> type[introduction_doc]
spacy.tokens.doc.Doc

>>> [token.text for token in introduction_doc]
['This', 'tutorial', 'is', 'about', 'Natural', 'Language',
'Processing', 'in', 'spaCy', '.']
4 với phương thức
>>> introduction_doc = nlp[
..     "This tutorial is about Natural Language Processing in spaCy."
.. ]
>>> type[introduction_doc]
spacy.tokens.doc.Doc

>>> [token.text for token in introduction_doc]
['This', 'tutorial', 'is', 'about', 'Natural', 'Language',
'Processing', 'in', 'spaCy', '.']
5 của đối tượng
>>> introduction_doc = nlp[
..     "This tutorial is about Natural Language Processing in spaCy."
.. ]
>>> type[introduction_doc]
spacy.tokens.doc.Doc

>>> [token.text for token in introduction_doc]
['This', 'tutorial', 'is', 'about', 'Natural', 'Language',
'Processing', 'in', 'spaCy', '.']
6. Vì tệp chứa thông tin giống như ví dụ trước nên bạn sẽ nhận được kết quả tương tự

Loại bỏ các quảng cáo

phát hiện câu

Phát hiện câu là quá trình xác định nơi bắt đầu và kết thúc câu trong một văn bản nhất định. Điều này cho phép bạn chia văn bản thành các đơn vị có nghĩa về mặt ngôn ngữ. Bạn sẽ sử dụng các đơn vị này khi đang xử lý văn bản của mình để thực hiện các tác vụ như gắn thẻ một phần lời nói [POS] và nhận dạng thực thể có tên, mà bạn sẽ đề cập sau trong hướng dẫn

Trong spaCy, thuộc tính

>>> introduction_doc = nlp[
..     "This tutorial is about Natural Language Processing in spaCy."
.. ]
>>> type[introduction_doc]
spacy.tokens.doc.Doc

>>> [token.text for token in introduction_doc]
['This', 'tutorial', 'is', 'about', 'Natural', 'Language',
'Processing', 'in', 'spaCy', '.']
7 được sử dụng để trích xuất các câu từ đối tượng
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
9. Đây là cách bạn trích xuất tổng số câu và bản thân các câu cho một đầu vào nhất định

>>>

>>> about_text = [
..     "Gus Proto is a Python developer currently"
..     " working for a London-based Fintech"
..     " company. He is interested in learning"
..     " Natural Language Processing."
.. ]
>>> about_doc = nlp[about_text]
>>> sentences = list[about_doc.sents]
>>> len[sentences]
2
>>> for sentence in sentences:
..     print[f"{sentence[:5]}..."]
...
Gus Proto is a Python...
He is interested in learning...

Trong ví dụ trên, spaCy có thể xác định chính xác các câu của đầu vào. Với

>>> introduction_doc = nlp[
..     "This tutorial is about Natural Language Processing in spaCy."
.. ]
>>> type[introduction_doc]
spacy.tokens.doc.Doc

>>> [token.text for token in introduction_doc]
['This', 'tutorial', 'is', 'about', 'Natural', 'Language',
'Processing', 'in', 'spaCy', '.']
7, bạn nhận được danh sách
>>> import pathlib
>>> file_name = "introduction.txt"
>>> introduction_doc = nlp[pathlib.Path[file_name].read_text[encoding="utf-8"]]
>>> print [[token.text for token in introduction_doc]]
['This', 'tutorial', 'is', 'about', 'Natural', 'Language',
'Processing', 'in', 'spaCy', '.', '\n']
0 đối tượng đại diện cho các câu riêng lẻ. Bạn cũng có thể cắt các đối tượng
>>> import pathlib
>>> file_name = "introduction.txt"
>>> introduction_doc = nlp[pathlib.Path[file_name].read_text[encoding="utf-8"]]
>>> print [[token.text for token in introduction_doc]]
['This', 'tutorial', 'is', 'about', 'Natural', 'Language',
'Processing', 'in', 'spaCy', '.', '\n']
0 để tạo các phần của câu

Bạn cũng có thể tùy chỉnh hành vi phát hiện câu bằng cách sử dụng dấu phân cách tùy chỉnh. Đây là một ví dụ trong đó dấu chấm lửng [

>>> import pathlib
>>> file_name = "introduction.txt"
>>> introduction_doc = nlp[pathlib.Path[file_name].read_text[encoding="utf-8"]]
>>> print [[token.text for token in introduction_doc]]
['This', 'tutorial', 'is', 'about', 'Natural', 'Language',
'Processing', 'in', 'spaCy', '.', '\n']
2] được sử dụng làm dấu phân cách, bên cạnh dấu chấm hoặc dấu chấm [
>>> import pathlib
>>> file_name = "introduction.txt"
>>> introduction_doc = nlp[pathlib.Path[file_name].read_text[encoding="utf-8"]]
>>> print [[token.text for token in introduction_doc]]
['This', 'tutorial', 'is', 'about', 'Natural', 'Language',
'Processing', 'in', 'spaCy', '.', '\n']
3]

>>>

>>> ellipsis_text = [
..     "Gus, can you, .. never mind, I forgot"
..     " what I was saying. So, do you think"
..     " we should ..."
.. ]

>>> from spacy.language import Language
>>> @Language.component["set_custom_boundaries"]
.. def set_custom_boundaries[doc]:
..     """Add support to use `...` as a delimiter for sentence detection"""
..     for token in doc[:-1]:
..         if token.text == "...":
..             doc[token.i + 1].is_sent_start = True
..     return doc
...

>>> custom_nlp = spacy.load["en_core_web_sm"]
>>> custom_nlp.add_pipe["set_custom_boundaries", before="parser"]
>>> custom_ellipsis_doc = custom_nlp[ellipsis_text]
>>> custom_ellipsis_sentences = list[custom_ellipsis_doc.sents]
>>> for sentence in custom_ellipsis_sentences:
..     print[sentence]
...
Gus, can you, ...
never mind, I forgot what I was saying.
So, do you think we should ...

Đối với ví dụ này, bạn đã sử dụng trình trang trí

>>> import pathlib
>>> file_name = "introduction.txt"
>>> introduction_doc = nlp[pathlib.Path[file_name].read_text[encoding="utf-8"]]
>>> print [[token.text for token in introduction_doc]]
['This', 'tutorial', 'is', 'about', 'Natural', 'Language',
'Processing', 'in', 'spaCy', '.', '\n']
4 để xác định một hàm mới lấy đối tượng
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
9 làm đối số. Công việc của chức năng này là xác định các mã thông báo trong
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
9 là phần đầu của câu và đánh dấu thuộc tính
>>> import pathlib
>>> file_name = "introduction.txt"
>>> introduction_doc = nlp[pathlib.Path[file_name].read_text[encoding="utf-8"]]
>>> print [[token.text for token in introduction_doc]]
['This', 'tutorial', 'is', 'about', 'Natural', 'Language',
'Processing', 'in', 'spaCy', '.', '\n']
7 của chúng thành
>>> import pathlib
>>> file_name = "introduction.txt"
>>> introduction_doc = nlp[pathlib.Path[file_name].read_text[encoding="utf-8"]]
>>> print [[token.text for token in introduction_doc]]
['This', 'tutorial', 'is', 'about', 'Natural', 'Language',
'Processing', 'in', 'spaCy', '.', '\n']
8. Sau khi thực hiện xong, hàm phải trả lại đối tượng
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
9

Sau đó, bạn có thể thêm chức năng ranh giới tùy chỉnh vào đối tượng

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

1 bằng cách sử dụng phương thức
>>> about_text = [
..     "Gus Proto is a Python developer currently"
..     " working for a London-based Fintech"
..     " company. He is interested in learning"
..     " Natural Language Processing."
.. ]
>>> about_doc = nlp[about_text]
>>> sentences = list[about_doc.sents]
>>> len[sentences]
2
>>> for sentence in sentences:
..     print[f"{sentence[:5]}..."]
...
Gus Proto is a Python...
He is interested in learning...
1. Phân tích cú pháp văn bản với đối tượng
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

1 đã sửa đổi này giờ đây sẽ coi từ sau hình elip là bắt đầu của một câu mới

Mã thông báo trong spaCy

Xây dựng vùng chứa

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
9 liên quan đến việc mã hóa văn bản. Quá trình mã thông báo chia nhỏ văn bản thành các đơn vị cơ bản—hoặc mã thông báo—được thể hiện trong spaCy dưới dạng đối tượng
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

5

Như bạn đã thấy, với spaCy, bạn có thể in mã thông báo bằng cách lặp qua đối tượng

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
9. Nhưng đối tượng
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

5 cũng có sẵn các thuộc tính khác để khám phá. Chẳng hạn, vị trí chỉ mục ban đầu của mã thông báo trong chuỗi vẫn có sẵn dưới dạng thuộc tính trên
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

5

>>>

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> about_text = [
..     "Gus Proto is a Python developer currently"
..     " working for a London-based Fintech"
..     " company. He is interested in learning"
..     " Natural Language Processing."
.. ]
>>> about_doc = nlp[about_text]

>>> for token in about_doc:
..     print [token, token.idx]
...
Gus 0
Proto 4
is 10
a 13
Python 15
developer 22
currently 32
working 42
for 50
a 54
London 56
- 62
based 63
Fintech 69
company 77
. 84
He 86
is 89
interested 92
in 103
learning 106
Natural 115
Language 123
Processing 132
. 142

Trong ví dụ này, bạn lặp lại trên

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
9, in cả thuộc tính
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

5 và
>>> ellipsis_text = [
..     "Gus, can you, .. never mind, I forgot"
..     " what I was saying. So, do you think"
..     " we should ..."
.. ]

>>> from spacy.language import Language
>>> @Language.component["set_custom_boundaries"]
.. def set_custom_boundaries[doc]:
..     """Add support to use `...` as a delimiter for sentence detection"""
..     for token in doc[:-1]:
..         if token.text == "...":
..             doc[token.i + 1].is_sent_start = True
..     return doc
...

>>> custom_nlp = spacy.load["en_core_web_sm"]
>>> custom_nlp.add_pipe["set_custom_boundaries", before="parser"]
>>> custom_ellipsis_doc = custom_nlp[ellipsis_text]
>>> custom_ellipsis_sentences = list[custom_ellipsis_doc.sents]
>>> for sentence in custom_ellipsis_sentences:
..     print[sentence]
...
Gus, can you, ...
never mind, I forgot what I was saying.
So, do you think we should ...
0, đại diện cho vị trí bắt đầu của mã thông báo trong văn bản gốc. Giữ thông tin này có thể hữu ích cho việc thay thế từ tại chỗ xuống dòng, ví dụ

spaCy cung cấp nhiều thứ khác cho lớp

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

5

>>>

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
0

Trong ví dụ này, bạn sử dụng định dạng chuỗi f để xuất bảng truy cập một số thuộc tính phổ biến từ mỗi

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

5 trong
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
9

  • >>> ellipsis_text = [
    ..     "Gus, can you, .. never mind, I forgot"
    ..     " what I was saying. So, do you think"
    ..     " we should ..."
    .. ]
    
    >>> from spacy.language import Language
    >>> @Language.component["set_custom_boundaries"]
    .. def set_custom_boundaries[doc]:
    ..     """Add support to use `...` as a delimiter for sentence detection"""
    ..     for token in doc[:-1]:
    ..         if token.text == "...":
    ..             doc[token.i + 1].is_sent_start = True
    ..     return doc
    ...
    
    >>> custom_nlp = spacy.load["en_core_web_sm"]
    >>> custom_nlp.add_pipe["set_custom_boundaries", before="parser"]
    >>> custom_ellipsis_doc = custom_nlp[ellipsis_text]
    >>> custom_ellipsis_sentences = list[custom_ellipsis_doc.sents]
    >>> for sentence in custom_ellipsis_sentences:
    ..     print[sentence]
    ...
    Gus, can you, ...
    never mind, I forgot what I was saying.
    So, do you think we should ...
    
    4 in văn bản mã thông báo cùng với bất kỳ dấu cách nào ở cuối, nếu có
  • >>> ellipsis_text = [
    ..     "Gus, can you, .. never mind, I forgot"
    ..     " what I was saying. So, do you think"
    ..     " we should ..."
    .. ]
    
    >>> from spacy.language import Language
    >>> @Language.component["set_custom_boundaries"]
    .. def set_custom_boundaries[doc]:
    ..     """Add support to use `...` as a delimiter for sentence detection"""
    ..     for token in doc[:-1]:
    ..         if token.text == "...":
    ..             doc[token.i + 1].is_sent_start = True
    ..     return doc
    ...
    
    >>> custom_nlp = spacy.load["en_core_web_sm"]
    >>> custom_nlp.add_pipe["set_custom_boundaries", before="parser"]
    >>> custom_ellipsis_doc = custom_nlp[ellipsis_text]
    >>> custom_ellipsis_sentences = list[custom_ellipsis_doc.sents]
    >>> for sentence in custom_ellipsis_sentences:
    ..     print[sentence]
    ...
    Gus, can you, ...
    never mind, I forgot what I was saying.
    So, do you think we should ...
    
    5 cho biết liệu mã thông báo có bao gồm các ký tự chữ cái hay không
  • >>> ellipsis_text = [
    ..     "Gus, can you, .. never mind, I forgot"
    ..     " what I was saying. So, do you think"
    ..     " we should ..."
    .. ]
    
    >>> from spacy.language import Language
    >>> @Language.component["set_custom_boundaries"]
    .. def set_custom_boundaries[doc]:
    ..     """Add support to use `...` as a delimiter for sentence detection"""
    ..     for token in doc[:-1]:
    ..         if token.text == "...":
    ..             doc[token.i + 1].is_sent_start = True
    ..     return doc
    ...
    
    >>> custom_nlp = spacy.load["en_core_web_sm"]
    >>> custom_nlp.add_pipe["set_custom_boundaries", before="parser"]
    >>> custom_ellipsis_doc = custom_nlp[ellipsis_text]
    >>> custom_ellipsis_sentences = list[custom_ellipsis_doc.sents]
    >>> for sentence in custom_ellipsis_sentences:
    ..     print[sentence]
    ...
    Gus, can you, ...
    never mind, I forgot what I was saying.
    So, do you think we should ...
    
    6 cho biết mã thông báo có phải là ký hiệu dấu chấm câu hay không
  • >>> ellipsis_text = [
    ..     "Gus, can you, .. never mind, I forgot"
    ..     " what I was saying. So, do you think"
    ..     " we should ..."
    .. ]
    
    >>> from spacy.language import Language
    >>> @Language.component["set_custom_boundaries"]
    .. def set_custom_boundaries[doc]:
    ..     """Add support to use `...` as a delimiter for sentence detection"""
    ..     for token in doc[:-1]:
    ..         if token.text == "...":
    ..             doc[token.i + 1].is_sent_start = True
    ..     return doc
    ...
    
    >>> custom_nlp = spacy.load["en_core_web_sm"]
    >>> custom_nlp.add_pipe["set_custom_boundaries", before="parser"]
    >>> custom_ellipsis_doc = custom_nlp[ellipsis_text]
    >>> custom_ellipsis_sentences = list[custom_ellipsis_doc.sents]
    >>> for sentence in custom_ellipsis_sentences:
    ..     print[sentence]
    ...
    Gus, can you, ...
    never mind, I forgot what I was saying.
    So, do you think we should ...
    
    7 cho biết mã thông báo có phải là từ dừng hay không. Bạn sẽ đề cập đến các từ dừng một lát sau trong hướng dẫn này

Cũng như nhiều khía cạnh của spaCy, bạn cũng có thể tùy chỉnh quy trình mã thông báo để phát hiện mã thông báo trên các ký tự tùy chỉnh. Điều này thường được sử dụng cho các từ có gạch nối như London-based

Để tùy chỉnh mã thông báo, bạn cần cập nhật thuộc tính

>>> ellipsis_text = [
..     "Gus, can you, .. never mind, I forgot"
..     " what I was saying. So, do you think"
..     " we should ..."
.. ]

>>> from spacy.language import Language
>>> @Language.component["set_custom_boundaries"]
.. def set_custom_boundaries[doc]:
..     """Add support to use `...` as a delimiter for sentence detection"""
..     for token in doc[:-1]:
..         if token.text == "...":
..             doc[token.i + 1].is_sent_start = True
..     return doc
...

>>> custom_nlp = spacy.load["en_core_web_sm"]
>>> custom_nlp.add_pipe["set_custom_boundaries", before="parser"]
>>> custom_ellipsis_doc = custom_nlp[ellipsis_text]
>>> custom_ellipsis_sentences = list[custom_ellipsis_doc.sents]
>>> for sentence in custom_ellipsis_sentences:
..     print[sentence]
...
Gus, can you, ...
never mind, I forgot what I was saying.
So, do you think we should ...
8 trên đối tượng
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

1 có thể gọi bằng một đối tượng
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> about_text = [
..     "Gus Proto is a Python developer currently"
..     " working for a London-based Fintech"
..     " company. He is interested in learning"
..     " Natural Language Processing."
.. ]
>>> about_doc = nlp[about_text]

>>> for token in about_doc:
..     print [token, token.idx]
...
Gus 0
Proto 4
is 10
a 13
Python 15
developer 22
currently 32
working 42
for 50
a 54
London 56
- 62
based 63
Fintech 69
company 77
. 84
He 86
is 89
interested 92
in 103
learning 106
Natural 115
Language 123
Processing 132
. 142
0 mới

Để xem những gì liên quan, hãy tưởng tượng bạn có một số văn bản sử dụng ký hiệu

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> about_text = [
..     "Gus Proto is a Python developer currently"
..     " working for a London-based Fintech"
..     " company. He is interested in learning"
..     " Natural Language Processing."
.. ]
>>> about_doc = nlp[about_text]

>>> for token in about_doc:
..     print [token, token.idx]
...
Gus 0
Proto 4
is 10
a 13
Python 15
developer 22
currently 32
working 42
for 50
a 54
London 56
- 62
based 63
Fintech 69
company 77
. 84
He 86
is 89
interested 92
in 103
learning 106
Natural 115
Language 123
Processing 132
. 142
1 thay vì dấu gạch nối thông thường [
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> about_text = [
..     "Gus Proto is a Python developer currently"
..     " working for a London-based Fintech"
..     " company. He is interested in learning"
..     " Natural Language Processing."
.. ]
>>> about_doc = nlp[about_text]

>>> for token in about_doc:
..     print [token, token.idx]
...
Gus 0
Proto 4
is 10
a 13
Python 15
developer 22
currently 32
working 42
for 50
a 54
London 56
- 62
based 63
Fintech 69
company 77
. 84
He 86
is 89
interested 92
in 103
learning 106
Natural 115
Language 123
Processing 132
. 142
2] làm phụ tố để liên kết các từ với nhau. Vì vậy, thay vì có trụ sở tại Luân Đôn, bạn có trụ sở tại London@

>>>

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
1

Trong ví dụ này, phân tích cú pháp mặc định đọc văn bản có trụ sở tại London@ dưới dạng một mã thông báo, nhưng nếu bạn sử dụng dấu gạch nối thay vì ký hiệu

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> about_text = [
..     "Gus Proto is a Python developer currently"
..     " working for a London-based Fintech"
..     " company. He is interested in learning"
..     " Natural Language Processing."
.. ]
>>> about_doc = nlp[about_text]

>>> for token in about_doc:
..     print [token, token.idx]
...
Gus 0
Proto 4
is 10
a 13
Python 15
developer 22
currently 32
working 42
for 50
a 54
London 56
- 62
based 63
Fintech 69
company 77
. 84
He 86
is 89
interested 92
in 103
learning 106
Natural 115
Language 123
Processing 132
. 142
1 thì bạn sẽ nhận được ba mã thông báo

Để bao gồm ký hiệu

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> about_text = [
..     "Gus Proto is a Python developer currently"
..     " working for a London-based Fintech"
..     " company. He is interested in learning"
..     " Natural Language Processing."
.. ]
>>> about_doc = nlp[about_text]

>>> for token in about_doc:
..     print [token, token.idx]
...
Gus 0
Proto 4
is 10
a 13
Python 15
developer 22
currently 32
working 42
for 50
a 54
London 56
- 62
based 63
Fintech 69
company 77
. 84
He 86
is 89
interested 92
in 103
learning 106
Natural 115
Language 123
Processing 132
. 142
1 làm trung tố tùy chỉnh, bạn cần xây dựng đối tượng
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> about_text = [
..     "Gus Proto is a Python developer currently"
..     " working for a London-based Fintech"
..     " company. He is interested in learning"
..     " Natural Language Processing."
.. ]
>>> about_doc = nlp[about_text]

>>> for token in about_doc:
..     print [token, token.idx]
...
Gus 0
Proto 4
is 10
a 13
Python 15
developer 22
currently 32
working 42
for 50
a 54
London 56
- 62
based 63
Fintech 69
company 77
. 84
He 86
is 89
interested 92
in 103
learning 106
Natural 115
Language 123
Processing 132
. 142
0 của riêng mình

>>>

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
2

Trong ví dụ này, trước tiên bạn khởi tạo một đối tượng

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

1 mới. Để xây dựng một
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> about_text = [
..     "Gus Proto is a Python developer currently"
..     " working for a London-based Fintech"
..     " company. He is interested in learning"
..     " Natural Language Processing."
.. ]
>>> about_doc = nlp[about_text]

>>> for token in about_doc:
..     print [token, token.idx]
...
Gus 0
Proto 4
is 10
a 13
Python 15
developer 22
currently 32
working 42
for 50
a 54
London 56
- 62
based 63
Fintech 69
company 77
. 84
He 86
is 89
interested 92
in 103
learning 106
Natural 115
Language 123
Processing 132
. 142
0 mới, bạn thường cung cấp cho nó

  • >>> import spacy
    >>> nlp = spacy.load["en_core_web_sm"]
    >>> about_text = [
    ..     "Gus Proto is a Python developer currently"
    ..     " working for a London-based Fintech"
    ..     " company. He is interested in learning"
    ..     " Natural Language Processing."
    .. ]
    >>> about_doc = nlp[about_text]
    
    >>> for token in about_doc:
    ..     print [token, token.idx]
    ...
    Gus 0
    Proto 4
    is 10
    a 13
    Python 15
    developer 22
    currently 32
    working 42
    for 50
    a 54
    London 56
    - 62
    based 63
    Fintech 69
    company 77
    . 84
    He 86
    is 89
    interested 92
    in 103
    learning 106
    Natural 115
    Language 123
    Processing 132
    . 142
    
    8. Một thùng lưu trữ cho các trường hợp đặc biệt, được sử dụng để xử lý các trường hợp như co thắt và biểu tượng cảm xúc
  • >>> import spacy
    >>> nlp = spacy.load["en_core_web_sm"]
    >>> about_text = [
    ..     "Gus Proto is a Python developer currently"
    ..     " working for a London-based Fintech"
    ..     " company. He is interested in learning"
    ..     " Natural Language Processing."
    .. ]
    >>> about_doc = nlp[about_text]
    
    >>> for token in about_doc:
    ..     print [token, token.idx]
    ...
    Gus 0
    Proto 4
    is 10
    a 13
    Python 15
    developer 22
    currently 32
    working 42
    for 50
    a 54
    London 56
    - 62
    based 63
    Fintech 69
    company 77
    . 84
    He 86
    is 89
    interested 92
    in 103
    learning 106
    Natural 115
    Language 123
    Processing 132
    . 142
    
    9. Một chức năng xử lý dấu chấm câu trước, chẳng hạn như dấu ngoặc đơn mở
  • $ python -m venv venv
    $ source ./venv/bin/activate
    [venv] $ python -m pip install spacy
    
    00. Một chức năng xử lý dấu chấm câu thành công, chẳng hạn như dấu ngoặc đơn đóng
  • $ python -m venv venv
    $ source ./venv/bin/activate
    [venv] $ python -m pip install spacy
    
    01. Một hàm xử lý các dấu tách không phải khoảng trắng, chẳng hạn như dấu gạch ngang
  • $ python -m venv venv
    $ source ./venv/bin/activate
    [venv] $ python -m pip install spacy
    
    02. Một hàm Boolean tùy chọn khớp với các chuỗi không bao giờ bị tách. Nó ghi đè các quy tắc trước đó và hữu ích cho các thực thể như URL hoặc số

Các hàm liên quan thường là các hàm regex mà bạn có thể truy cập từ các đối tượng regex đã biên dịch. Để xây dựng các đối tượng biểu thức chính quy cho các tiền tố và hậu tố—mà bạn không muốn tùy chỉnh—bạn có thể tạo chúng với các giá trị mặc định, được hiển thị trên các dòng 5 đến 10

Để tạo hàm trung tố tùy chỉnh, trước tiên, bạn xác định một danh sách mới trên dòng 12 với bất kỳ mẫu biểu thức chính quy nào mà bạn muốn đưa vào. Sau đó, bạn tham gia danh sách tùy chỉnh của mình với thuộc tính

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
04 của đối tượng
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

1, thuộc tính này cần được chuyển thành danh sách trước khi tham gia. Bạn muốn làm điều này để bao gồm tất cả các trung tố hiện có. Sau đó, bạn chuyển bộ dữ liệu mở rộng làm đối số cho
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
05 để lấy đối tượng biểu thức chính quy mới cho các phần bổ sung

Khi bạn gọi hàm tạo

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> about_text = [
..     "Gus Proto is a Python developer currently"
..     " working for a London-based Fintech"
..     " company. He is interested in learning"
..     " Natural Language Processing."
.. ]
>>> about_doc = nlp[about_text]

>>> for token in about_doc:
..     print [token, token.idx]
...
Gus 0
Proto 4
is 10
a 13
Python 15
developer 22
currently 32
working 42
for 50
a 54
London 56
- 62
based 63
Fintech 69
company 77
. 84
He 86
is 89
interested 92
in 103
learning 106
Natural 115
Language 123
Processing 132
. 142
0, bạn chuyển phương thức
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
07 trên các đối tượng biểu thức chính quy tiền tố và hậu tố, và hàm
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
08 trên đối tượng biểu thức chính quy trung tố. Bây giờ bạn có thể thay thế tokenizer trên đối tượng
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
09

Sau khi hoàn thành, bạn sẽ thấy rằng biểu tượng

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> about_text = [
..     "Gus Proto is a Python developer currently"
..     " working for a London-based Fintech"
..     " company. He is interested in learning"
..     " Natural Language Processing."
.. ]
>>> about_doc = nlp[about_text]

>>> for token in about_doc:
..     print [token, token.idx]
...
Gus 0
Proto 4
is 10
a 13
Python 15
developer 22
currently 32
working 42
for 50
a 54
London 56
- 62
based 63
Fintech 69
company 77
. 84
He 86
is 89
interested 92
in 103
learning 106
Natural 115
Language 123
Processing 132
. 142
1 hiện đã được mã hóa riêng

Loại bỏ các quảng cáo

Ngưng từ

Từ dừng thường được định nghĩa là từ phổ biến nhất trong ngôn ngữ. Trong tiếng Anh, một số ví dụ về các từ dừng là the, are, but, and they. Hầu hết các câu cần chứa các từ dừng để trở thành câu đầy đủ có ý nghĩa ngữ pháp

Với NLP, các từ dừng thường bị loại bỏ vì chúng không quan trọng và chúng làm sai lệch nghiêm trọng bất kỳ phân tích tần suất từ ​​nào. spaCy lưu trữ danh sách các từ dừng cho ngôn ngữ tiếng Anh

>>>

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
3

Trong ví dụ này, bạn đã kiểm tra danh sách

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
11 từ
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
12. Tuy nhiên, bạn không cần truy cập trực tiếp vào danh sách này. Bạn có thể xóa các từ dừng khỏi văn bản đầu vào bằng cách sử dụng thuộc tính
>>> ellipsis_text = [
..     "Gus, can you, .. never mind, I forgot"
..     " what I was saying. So, do you think"
..     " we should ..."
.. ]

>>> from spacy.language import Language
>>> @Language.component["set_custom_boundaries"]
.. def set_custom_boundaries[doc]:
..     """Add support to use `...` as a delimiter for sentence detection"""
..     for token in doc[:-1]:
..         if token.text == "...":
..             doc[token.i + 1].is_sent_start = True
..     return doc
...

>>> custom_nlp = spacy.load["en_core_web_sm"]
>>> custom_nlp.add_pipe["set_custom_boundaries", before="parser"]
>>> custom_ellipsis_doc = custom_nlp[ellipsis_text]
>>> custom_ellipsis_sentences = list[custom_ellipsis_doc.sents]
>>> for sentence in custom_ellipsis_sentences:
..     print[sentence]
...
Gus, can you, ...
never mind, I forgot what I was saying.
So, do you think we should ...
7 của mỗi mã thông báo

>>>

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
4

Ở đây bạn sử dụng cách hiểu danh sách với biểu thức điều kiện để tạo danh sách tất cả các từ không phải là từ dừng trong văn bản

Mặc dù bạn không thể chắc chắn chính xác câu đang cố nói gì mà không có từ dừng, nhưng bạn vẫn có nhiều thông tin về nội dung chung của câu đó.

bổ đề

Lemmatization là quá trình rút gọn các dạng biến cách của một từ trong khi vẫn đảm bảo rằng dạng rút gọn đó thuộc về ngôn ngữ. Dạng rút gọn này, hay từ gốc, được gọi là bổ đề

Ví dụ: tổ chức, tổ chức và tổ chức là tất cả các hình thức tổ chức. Ở đây, tổ chức là bổ đề. Biến thể của một từ cho phép bạn diễn đạt các phạm trù ngữ pháp khác nhau, như thì [tổ chức so với tổ chức], số [tàu hỏa so với tàu hỏa], v.v. Việc bổ đề là cần thiết vì nó giúp bạn giảm bớt các dạng biến cách của một từ để chúng có thể được phân tích thành một mục duy nhất. Nó cũng có thể giúp bạn bình thường hóa văn bản

spaCy đặt một thuộc tính

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
14 trên lớp
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

5. Thuộc tính này có dạng từ vựng của mã thông báo

>>>

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
5

Trong ví dụ này, bạn kiểm tra xem từ gốc có khác bổ đề không, nếu đúng thì bạn in cả từ gốc và bổ đề của nó

Ví dụ, bạn sẽ lưu ý rằng

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
16 rút gọn về dạng bổ đề của nó,
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
17. Nếu bạn không bổ sung ngữ pháp cho văn bản, thì
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
17 và
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
16 sẽ được tính là các mã thông báo khác nhau, mặc dù cả hai đều đề cập đến cùng một khái niệm. Lemmatization giúp bạn tránh các từ trùng lặp có thể trùng lặp về mặt khái niệm

Tần số từ

Giờ đây, bạn có thể chuyển đổi một văn bản nhất định thành mã thông báo và thực hiện phân tích thống kê về văn bản đó. Phân tích này có thể cung cấp cho bạn những hiểu biết khác nhau, chẳng hạn như các từ phổ biến hoặc các từ độc đáo trong văn bản

>>>

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
6

Bằng cách chỉ nhìn vào những từ phổ biến, bạn có thể đoán rằng văn bản nói về

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
20,
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
21 và
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
22. Đó là một phát hiện quan trọng. Nếu bạn chỉ cần nhìn vào những từ phổ biến nhất, điều đó có thể giúp bạn tiết kiệm rất nhiều thời gian đọc, bởi vì bạn có thể biết ngay văn bản có nói về điều gì đó mà bạn quan tâm hay không

Điều đó không có nghĩa là quá trình này được đảm bảo mang lại cho bạn kết quả tốt. Rốt cuộc, bạn đang mất một số thông tin trên đường đi

Điều đó nói rằng, để minh họa tại sao việc loại bỏ các từ dừng có thể hữu ích, đây là một ví dụ khác về cùng một văn bản bao gồm cả các từ dừng

>>>

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
7

Bốn trong số năm từ phổ biến nhất là từ dừng không thực sự cho bạn biết nhiều về văn bản tóm tắt. Đây là lý do tại sao các từ dừng thường được coi là tiếng ồn cho nhiều ứng dụng

Loại bỏ các quảng cáo

Gắn thẻ một phần của bài phát biểu

Một phần của bài phát biểu hoặc POS là một vai trò ngữ pháp giải thích cách sử dụng một từ cụ thể trong câu. Thông thường có tám phần của bài phát biểu

  1. Danh từ
  2. đại từ
  3. Tính từ
  4. động từ
  5. trạng từ
  6. giới từ
  7. Sự liên kết
  8. thán từ

Gắn thẻ một phần của bài phát biểu là quá trình gán thẻ POS cho mỗi mã thông báo tùy thuộc vào cách sử dụng của nó trong câu. Thẻ POS rất hữu ích để gán một danh mục cú pháp như danh từ hoặc động từ cho mỗi từ

Trong spaCy, các thẻ POS có sẵn như một thuộc tính trên đối tượng

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

5

>>>

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
8

Ở đây, hai thuộc tính của lớp

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
>>> nlp

5 được truy cập và in ra bằng f-strings

  1. $ python -m venv venv
    $ source ./venv/bin/activate
    [venv] $ python -m pip install spacy
    
    25 hiển thị một thẻ chi tiết
  2. $ python -m venv venv
    $ source ./venv/bin/activate
    [venv] $ python -m pip install spacy
    
    26 hiển thị thẻ chi tiết thô, là phiên bản rút gọn của thẻ chi tiết

Bạn cũng sử dụng

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
27 để cung cấp chi tiết mô tả về một thẻ POS cụ thể, đây có thể là một công cụ tham khảo có giá trị

Bằng cách sử dụng thẻ POS, bạn có thể trích xuất một loại từ cụ thể

>>>

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
9

Bạn có thể sử dụng kiểu phân loại từ này để rút ra những hiểu biết sâu sắc. Chẳng hạn, bạn có thể đánh giá tình cảm bằng cách phân tích tính từ nào được sử dụng phổ biến nhất bên cạnh danh từ

Hình dung. Sử dụng dislaCy

spaCy đi kèm với một trình hiển thị tích hợp có tên là displaCy. Bạn có thể sử dụng nó để trực quan hóa phân tích cú pháp phụ thuộc hoặc các thực thể được đặt tên trong trình duyệt hoặc sổ ghi chép Jupyter

Bạn có thể sử dụng displaCy để tìm thẻ POS cho mã thông báo

>>>

[venv] $ python -m spacy download en_core_web_sm
0

Đoạn mã trên sẽ tạo ra một máy chủ web đơn giản. Sau đó, bạn có thể xem hình ảnh trực quan bằng cách truy cập

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
28 trong trình duyệt của mình

dịch chuyển. Một phần của Trình diễn gắn thẻ bài phát biểu

Trong hình trên, mỗi mã thông báo được gán một thẻ POS được viết ngay bên dưới mã thông báo

Bạn cũng có thể sử dụng displaCy trong sổ ghi chép Jupyter

>>>

[venv] $ python -m spacy download en_core_web_sm
1

Thử chơi với các văn bản khác nhau để xem cách spaCy giải cấu trúc câu. Ngoài ra, hãy xem một số có sẵn để tùy chỉnh trực quan hóa

Loại bỏ các quảng cáo

Chức năng tiền xử lý

Để đưa văn bản của bạn sang định dạng lý tưởng để phân tích, bạn có thể viết các hàm tiền xử lý để gói gọn quy trình làm sạch của mình. Ví dụ: trong phần này, bạn sẽ tạo một bộ tiền xử lý áp dụng các thao tác sau

  • Chữ thường văn bản
  • Bổ sung từng mã thông báo
  • Loại bỏ các ký hiệu dấu câu
  • Loại bỏ các từ dừng

Chức năng tiền xử lý chuyển đổi văn bản thành định dạng có thể phân tích. Nó là điển hình cho hầu hết các nhiệm vụ NLP. Đây là một ví dụ

>>>

[venv] $ python -m spacy download en_core_web_sm
2

Lưu ý rằng

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
29 không chứa bất kỳ từ dừng hoặc ký hiệu dấu chấm câu nào và nó hoàn toàn bao gồm các mã thông báo chữ thường được bổ nghĩa

So khớp dựa trên quy tắc bằng spaCy

Đối sánh dựa trên quy tắc là một trong những bước trích xuất thông tin từ văn bản phi cấu trúc. Nó được sử dụng để xác định và trích xuất các mã thông báo và cụm từ theo các mẫu [chẳng hạn như chữ thường] và các đặc điểm ngữ pháp [chẳng hạn như một phần của bài phát biểu]

Mặc dù bạn có thể sử dụng các biểu thức chính quy để trích xuất các thực thể [chẳng hạn như số điện thoại], nhưng so khớp dựa trên quy tắc trong spaCy mạnh hơn so với chỉ biểu thức chính quy, bởi vì bạn có thể bao gồm các bộ lọc ngữ nghĩa hoặc ngữ pháp

Ví dụ: với đối sánh dựa trên quy tắc, bạn có thể trích xuất tên và họ, những danh từ này luôn là danh từ riêng

>>>

[venv] $ python -m spacy download en_core_web_sm
3

Trong ví dụ này,

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
30 là danh sách các đối tượng xác định tổ hợp mã thông báo sẽ được so khớp. Cả hai thẻ POS trong đó là
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
31 [danh từ riêng]. Vì vậy,
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
30 bao gồm hai đối tượng trong đó thẻ POS cho cả hai mã thông báo phải là
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
31. Sau đó, mẫu này được thêm vào
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
34 bằng phương pháp
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
35, phương pháp này lấy mã định danh
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
36 và danh sách các mẫu. Cuối cùng, các trận đấu thu được với chỉ số bắt đầu và kết thúc của chúng

Bạn cũng có thể sử dụng đối sánh dựa trên quy tắc để trích xuất số điện thoại

>>>

[venv] $ python -m spacy download en_core_web_sm
4

Trong ví dụ này, mẫu được cập nhật để khớp với số điện thoại. Ở đây, một số thuộc tính của mã thông báo cũng được sử dụng

  • $ python -m venv venv
    $ source ./venv/bin/activate
    [venv] $ python -m pip install spacy
    
    37 khớp với văn bản chính xác của mã thông báo
  • $ python -m venv venv
    $ source ./venv/bin/activate
    [venv] $ python -m pip install spacy
    
    38 biến đổi chuỗi mã thông báo để hiển thị các đặc điểm chính tả,
    $ python -m venv venv
    $ source ./venv/bin/activate
    [venv] $ python -m pip install spacy
    
    39 là viết tắt của chữ số
  • $ python -m venv venv
    $ source ./venv/bin/activate
    [venv] $ python -m pip install spacy
    
    40 định nghĩa toán tử. Sử dụng
    $ python -m venv venv
    $ source ./venv/bin/activate
    [venv] $ python -m pip install spacy
    
    41 làm giá trị có nghĩa là mẫu là tùy chọn, nghĩa là mẫu có thể khớp với 0 hoặc 1 lần

Kết hợp các từ điển này với nhau giúp bạn linh hoạt hơn trong việc lựa chọn các tiêu chí phù hợp của mình

Ghi chú. Để đơn giản, trong ví dụ này, các số điện thoại được coi là có định dạng cụ thể.

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
42. Bạn có thể thay đổi điều này tùy thuộc vào trường hợp sử dụng của bạn

Một lần nữa, đối sánh dựa trên quy tắc giúp bạn xác định và trích xuất các mã thông báo và cụm từ bằng cách đối sánh theo các mẫu từ vựng và đặc điểm ngữ pháp. Điều này có thể hữu ích khi bạn đang tìm kiếm một thực thể cụ thể

Phân tích cú pháp phụ thuộc bằng spaCy

Phân tích cú pháp phụ thuộc là quá trình trích xuất biểu đồ phụ thuộc của một câu để thể hiện cấu trúc ngữ pháp của nó. Nó xác định mối quan hệ phụ thuộc giữa các tiêu đề và những người phụ thuộc của chúng. Đầu câu không có tính phụ thuộc gọi là gốc câu. Động từ thường là gốc của câu. Tất cả các từ khác được liên kết với từ đầu

Các phụ thuộc có thể được ánh xạ trong biểu diễn đồ thị có hướng trong đó

  • Từ ngữ là các nút
  • Các quan hệ ngữ pháp là các cạnh

Phân tích cú pháp phụ thuộc giúp bạn biết vai trò của một từ trong văn bản và các từ khác nhau liên quan với nhau như thế nào

Đây là cách bạn có thể sử dụng phân tích cú pháp phụ thuộc để tìm mối quan hệ giữa các từ

>>>

[venv] $ python -m spacy download en_core_web_sm
5

Trong ví dụ này, câu chứa ba quan hệ

  1. $ python -m venv venv
    $ source ./venv/bin/activate
    [venv] $ python -m pip install spacy
    
    43 là chủ ngữ của từ này, và từ đầu của nó là một động từ
  2. $ python -m venv venv
    $ source ./venv/bin/activate
    [venv] $ python -m pip install spacy
    
    44 là một trợ từ, và từ đầu của nó là một động từ
  3. $ python -m venv venv
    $ source ./venv/bin/activate
    [venv] $ python -m pip install spacy
    
    45 là tân ngữ trực tiếp của động từ, và từ đầu của nó cũng là động từ

Danh sách các mối quan hệ không dành riêng cho spaCy. Thay vào đó, nó là một lĩnh vực nghiên cứu ngôn ngữ học đang phát triển

Bạn cũng có thể sử dụng displaCy để trực quan hóa cây phụ thuộc của câu

>>>

[venv] $ python -m spacy download en_core_web_sm
6

Mã này sẽ tạo ra một hình ảnh trực quan mà bạn có thể truy cập bằng cách mở

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
28 trong trình duyệt của mình

dịch chuyển. Trình diễn phân tích cú pháp phụ thuộc

Hình ảnh này cho bạn thấy một cách trực quan rằng chủ ngữ của câu là danh từ riêng

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
20 và nó có mối quan hệ
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
48 với
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
49

Loại bỏ các quảng cáo

Điều hướng cây và cây con

Biểu đồ phụ thuộc có tất cả các thuộc tính của cây. Cây này chứa thông tin về cấu trúc câu và ngữ pháp và có thể được duyệt theo nhiều cách khác nhau để trích xuất các mối quan hệ

spaCy cung cấp các thuộc tính như

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
50,
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
51,
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
52 và
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
53 để giúp điều hướng cây phân tích cú pháp dễ dàng hơn. Dưới đây là một vài ví dụ về việc sử dụng các thuộc tính đó

>>>

[venv] $ python -m spacy download en_core_web_sm
7

Trong các ví dụ này, bạn đã biết nhiều cách khác nhau để điều hướng cây phụ thuộc của câu

Phân tích cú pháp nông

Phân tích cú pháp nông, hoặc phân đoạn, là quá trình trích xuất các cụm từ từ văn bản phi cấu trúc. Điều này liên quan đến việc chia nhóm các mã thông báo liền kề thành các cụm từ trên cơ sở thẻ POS của chúng. Có một số cụm tiêu chuẩn nổi tiếng như cụm danh từ, cụm động từ và cụm giới từ

Phát hiện cụm từ danh từ

Cụm danh từ là cụm có danh từ đứng đầu. Nó cũng có thể bao gồm các loại từ khác, chẳng hạn như tính từ, thứ tự và từ hạn định. Các cụm danh từ rất hữu ích để giải thích ngữ cảnh của câu. Chúng giúp bạn hiểu câu nói về cái gì

spaCy có thuộc tính

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
54 trên đối tượng
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
9. Bạn có thể sử dụng thuộc tính này để trích xuất các cụm danh từ

>>>

[venv] $ python -m spacy download en_core_web_sm
8

Bằng cách nhìn vào các cụm danh từ, bạn có thể nhận được thông tin về văn bản của mình. Ví dụ:

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
56 cho biết rằng văn bản đề cập đến một hội nghị, trong khi ngày
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
57 cho bạn biết rằng hội nghị được lên kế hoạch cho
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
57

Đây là một phương pháp khác để tóm tắt một văn bản và có được thông tin quan trọng nhất mà không cần phải đọc tất cả

Phát hiện cụm từ động từ

Cụm động từ là một đơn vị cú pháp bao gồm ít nhất một động từ. Động từ này có thể được nối bởi các đoạn khác, chẳng hạn như cụm danh từ. Các cụm động từ rất hữu ích để hiểu các hành động mà danh từ tham gia.

spaCy không có chức năng tích hợp để trích xuất các cụm động từ, vì vậy bạn sẽ cần một thư viện có tên là

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
59. Bạn có thể sử dụng
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
5 để cài đặt
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
59

[venv] $ python -m spacy download en_core_web_sm
9

Bây giờ bạn đã cài đặt

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
59, bạn có thể sử dụng nó để trích xuất các cụm động từ dựa trên các quy tắc ngữ pháp

>>>

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
0

Trong ví dụ này, cụm động từ

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
63 chỉ ra rằng một cái gì đó sẽ được giới thiệu. Bằng cách nhìn vào các cụm danh từ, bạn có thể ghép lại những gì sẽ được giới thiệu lại với nhau mà không cần phải đọc toàn bộ văn bản

Loại bỏ các quảng cáo

Nhận dạng thực thể được đặt tên

Nhận dạng thực thể được đặt tên [NER] là quá trình định vị các thực thể được đặt tên trong văn bản phi cấu trúc và sau đó phân loại chúng thành các danh mục được xác định trước, chẳng hạn như tên người, tổ chức, địa điểm, giá trị tiền tệ, tỷ lệ phần trăm và biểu thức thời gian

Bạn có thể sử dụng NER để tìm hiểu thêm về ý nghĩa của văn bản của bạn. Ví dụ: bạn có thể sử dụng nó để điền thẻ cho một bộ tài liệu nhằm cải thiện tìm kiếm từ khóa. Bạn cũng có thể sử dụng nó để phân loại phiếu hỗ trợ khách hàng thành các danh mục có liên quan

spaCy có thuộc tính

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
64 trên
>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
9 đối tượng. Bạn có thể sử dụng nó để trích xuất các thực thể được đặt tên

>>>

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
1

Trong ví dụ trên,

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
66 là một đối tượng
>>> import pathlib
>>> file_name = "introduction.txt"
>>> introduction_doc = nlp[pathlib.Path[file_name].read_text[encoding="utf-8"]]
>>> print [[token.text for token in introduction_doc]]
['This', 'tutorial', 'is', 'about', 'Natural', 'Language',
'Processing', 'in', 'spaCy', '.', '\n']
0 với các thuộc tính khác nhau

  • >>> introduction_doc = nlp[
    ..     "This tutorial is about Natural Language Processing in spaCy."
    .. ]
    >>> type[introduction_doc]
    spacy.tokens.doc.Doc
    
    >>> [token.text for token in introduction_doc]
    ['This', 'tutorial', 'is', 'about', 'Natural', 'Language',
    'Processing', 'in', 'spaCy', '.']
    
    3 cung cấp biểu diễn văn bản Unicode của thực thể
  • $ python -m venv venv
    $ source ./venv/bin/activate
    [venv] $ python -m pip install spacy
    
    69 biểu thị phần bù ký tự cho phần đầu của thực thể
  • $ python -m venv venv
    $ source ./venv/bin/activate
    [venv] $ python -m pip install spacy
    
    70 biểu thị phần bù ký tự cho phần cuối của thực thể
  • $ python -m venv venv
    $ source ./venv/bin/activate
    [venv] $ python -m pip install spacy
    
    71 đưa ra nhãn của thực thể

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
72 cung cấp chi tiết mô tả về từng nhãn thực thể. Bạn cũng có thể sử dụng displaCy để trực quan hóa các thực thể này

>>>

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
2

Nếu bạn mở

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
28 trong trình duyệt của mình, thì bạn sẽ có thể xem hình ảnh trực quan

dịch chuyển. Bản trình diễn nhận dạng thực thể được đặt tên

Một trường hợp sử dụng cho NER là sắp xếp lại tên của mọi người từ một văn bản. Ví dụ: bạn có thể muốn làm điều này để ẩn thông tin cá nhân được thu thập trong một cuộc khảo sát. Hãy xem ví dụ sau

>>>

>>> import spacy
>>> nlp = spacy.load["en_core_web_sm"]
3

Trong ví dụ này,

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
74 sử dụng
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
75, cung cấp mã IOB của thẻ thực thể được đặt tên bằng cách sử dụng gắn thẻ từ trong ra ngoài [IOB]

Hàm

$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
76 sử dụng a để điều chỉnh mô hình mã thông báo. Nó nhận tất cả các mã thông báo và chuyển văn bản qua
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
77 để thay thế bất kỳ mã thông báo mục tiêu nào bằng
$ python -m venv venv
$ source ./venv/bin/activate
[venv] $ python -m pip install spacy
78

Vì vậy, cứ như vậy, bạn sẽ có thể sắp xếp lại một lượng lớn văn bản trong vài giây, trong khi thực hiện thủ công có thể mất nhiều giờ. Điều đó nói rằng, bạn luôn cần phải cẩn thận với việc chỉnh sửa, bởi vì các mô hình không hoàn hảo

Phần kết luận

spaCy là một thư viện mạnh mẽ và tiên tiến đang trở nên phổ biến rộng rãi cho các ứng dụng NLP do tốc độ, tính dễ sử dụng, độ chính xác và khả năng mở rộng của nó

Trong hướng dẫn này, bạn đã học cách

  • Triển khai NLP trong spaCy
  • Tùy chỉnh và mở rộng các chức năng tích hợp trong spaCy
  • Thực hiện phân tích thống kê cơ bản trên một văn bản
  • Tạo một quy trình để xử lý văn bản phi cấu trúc
  • Phân tích một câu và trích xuất những hiểu biết có ý nghĩa từ nó

Giờ đây, bạn đã có một số công cụ hữu ích để bắt đầu khám phá thế giới xử lý ngôn ngữ tự nhiên

Mã nguồn miễn phí. Nhấp vào đây để tải xuống mã nguồn miễn phí mà bạn sẽ sử dụng để xử lý ngôn ngữ tự nhiên [NLP] trong spaCy

Đánh dấu là đã hoàn thành

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Gửi cho tôi thủ thuật Python »

Giới thiệu về Taranjeet Singh

Taranjeet là một kỹ sư phần mềm, có kinh nghiệm về Django, NLP và Tìm kiếm, đã xây dựng công cụ tìm kiếm cho sinh viên K12 [nổi bật trong Google IO 2019] và trẻ em mắc chứng Tự kỷ

» Tìm hiểu thêm về Taranjeet

Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Aldren

Geir Arne

Ian

Joanna

kate

Mike

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Chuyên gia Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi

Trình phân tích cú pháp ngôn ngữ là gì?

Trong trường hợp ngôn ngữ lập trình, trình phân tích cú pháp là một thành phần của trình biên dịch hoặc trình thông dịch, phân tích cú pháp mã nguồn của ngôn ngữ lập trình máy tính để tạo ra một số dạng biểu diễn bên trong< . ; the parser is a key step in the compiler frontend.

Phân tích cú pháp Python hoạt động như thế nào?

Phân tích cú pháp Python được thực hiện bằng nhiều cách khác nhau, chẳng hạn như sử dụng mô-đun trình phân tích cú pháp, phân tích cú pháp bằng biểu thức chính quy, phân tích cú pháp bằng một số phương thức chuỗi như split[] và strip[], phân tích cú pháp bằng gấu trúc chẳng hạn như đọc tệp CSV thành văn bản bằng cách sử dụng read. csv, v.v.

Trình phân tích cú pháp trong bộ xử lý ngôn ngữ là gì?

Trình phân tích cú pháp là một phần của trình biên dịch chia mã nguồn thành các phần nhỏ của chuỗi ký tự được gọi là mã thông báo . Thuật ngữ này có nguồn gốc từ ngôn ngữ học. Trong ngôn ngữ học, phân tích cú pháp liên quan đến việc lập sơ đồ vật lý cấu trúc cơ bản của một câu.

Chủ Đề