Hướng dẫn how do you split a sentence using punctuation in python? - làm thế nào để bạn tách một câu bằng dấu chấm câu trong python?

Chia một chuỗi thành từ và dấu câu trong python #

Sử dụng phương thức

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ result = re.findall(r"[\w'\"]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)
7 để chia một chuỗi thành các từ và dấu câu, ví dụ:

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ result = re.findall(r"[\w'\"]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)
8. Phương thức

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ result = re.findall(r"[\w'\"]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)
9 sẽ phân chia chuỗi trên các ký tự trắng và dấu câu và sẽ trả về một danh sách các trận đấu.

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ result = re.findall(r"[\w'\"]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)

Phương thức Re.Findall lấy một mẫu và một chuỗi làm đối số và trả về danh sách các chuỗi chứa tất cả các kết quả phù hợp không chồng chéo của mẫu trong chuỗi.

Các dấu ngoặc vuông

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ # result = re.findall(r"[\w'\"]+|[,.!?]", my_str) result = re.findall(r"[\w]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)
0 được sử dụng để chỉ ra một tập hợp các ký tự.

Nhân vật

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ # result = re.findall(r"[\w'\"]+|[,.!?]", my_str) result = re.findall(r"[\w]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)
1 khớp với hầu hết các ký tự có thể là một phần của một từ trong bất kỳ ngôn ngữ nào, cũng như các số và nhấn mạnh.

Nếu cờ

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ # result = re.findall(r"[\w'\"]+|[,.!?]", my_str) result = re.findall(r"[\w]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)
2 được đặt, ký tự

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ # result = re.findall(r"[\w'\"]+|[,.!?]", my_str) result = re.findall(r"[\w]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)
1 khớp với

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ # result = re.findall(r"[\w'\"]+|[,.!?]", my_str) result = re.findall(r"[\w]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)
4.

Tập hợp các ký tự của chúng tôi cũng bao gồm một trích dẫn duy nhất và kép.

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ result = re.findall(r"[\w'\"]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)

Nếu bạn muốn loại trừ các báo giá đơn hoặc gấp đôi khỏi kết quả, hãy xóa các ký tự

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ # result = re.findall(r"[\w'\"]+|[,.!?]", my_str) result = re.findall(r"[\w]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)
5 và

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ # result = re.findall(r"[\w'\"]+|[,.!?]", my_str) result = re.findall(r"[\w]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)
6 từ giữa các dấu ngoặc vuông.

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ # result = re.findall(r"[\w'\"]+|[,.!?]", my_str) result = re.findall(r"[\w]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)
7 phù hợp với ký tự trước 1 lần trở lên.

Nói cách khác, không quan trọng có bao nhiêu ký tự mà từ này bao gồm, miễn là nó chỉ chứa các ký tự, số, một dấu ngoặc đơn, độc thân và đôi, chúng tôi coi đó là một trận đấu duy nhất.

Nhân vật

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ # result = re.findall(r"[\w'\"]+|[,.!?]", my_str) result = re.findall(r"[\w]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)
8 là một

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ # result = re.findall(r"[\w'\"]+|[,.!?]", my_str) result = re.findall(r"[\w]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)
9. Một trong hai trận đấu
>>> c = "help, me"
>>> print c.split()
['help,', 'me']
0.

Bộ dấu ngoặc vuông thứ hai phù hợp với dấu chấm câu - dấu phẩy, dấu chấm, dấu chấm than và dấu hỏi.

Bạn có thể thêm bất kỳ dấu chấm câu nào khác giữa các dấu ngoặc vuông, ví dụ: Một đại tràng

>>> c = "help, me"
>>> print c.split()
['help,', 'me']
1, một dấu chấm phẩy
>>> c = "help, me"
>>> print c.split()
['help,', 'me']
2, dấu ngoặc hoặc dấu ngoặc đơn.

Toàn bộ, một trận đấu là - một hoặc nhiều ký tự, số, dấu gạch dưới, trích dẫn hoặc bất kỳ dấu chấm câu nào từ các dấu mà chúng tôi bao gồm giữa các dấu ngoặc vuông.

Bạn có thể điều chỉnh biểu thức thông thường theo trường hợp sử dụng của bạn. Phần này của các tài liệu có thông tin liên quan đến những gì mỗi nhân vật đặc biệt làm.

Đây là đoạn mã hoàn chỉnh.

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ # result = re.findall(r"[\w'\"]+|[,.!?]", my_str) result = re.findall(r"[\w]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)

Tôi đang cố gắng chia một chuỗi thành các từ và dấu câu, thêm dấu câu vào danh sách được tạo ra bởi sự phân chia.

Ví dụ:

>>> c = "help, me"
>>> print c.split()
['help,', 'me']

Điều tôi thực sự muốn danh sách trông giống như:

['help', ',', 'me']

Vì vậy, tôi muốn chuỗi phân chia ở khoảng trắng với dấu câu được chia từ các từ.

Tôi đã cố gắng phân tích cú pháp chuỗi trước và sau đó chạy chia tách:

>>> for character in c:
...     if character in ".,;!?":
...             outputCharacter = " %s" % character
...     else:
...             outputCharacter = character
...     separatedPunctuation += outputCharacter
>>> print separatedPunctuation
help , me
>>> print separatedPunctuation.split()
['help', ',', 'me']

Điều này tạo ra kết quả tôi muốn, nhưng bị chậm một cách đau đớn trên các tệp lớn.

Có cách nào để làm điều này hiệu quả hơn không?

Fionnuala

89,8K7 Huy hiệu vàng109 Huy hiệu bạc147 Huy hiệu đồng7 gold badges109 silver badges147 bronze badges

Hỏi ngày 14 tháng 12 năm 2008 lúc 23:30Dec 14, 2008 at 23:30

Hướng dẫn how do you split a sentence using punctuation in python? - làm thế nào để bạn tách một câu bằng dấu chấm câu trong python?

1

Đây là cách ít nhiều là cách để làm điều đó:

>>> import re
>>> re.findall(r"[\w']+|[.,!?;]", "Hello, I'm a string!")
['Hello', ',', "I'm", 'a', 'string', '!']

Bí quyết là, không nghĩ về nơi để phân chia chuỗi, mà là những gì cần bao gồm trong các mã thông báo.

Caveats:

  • Dấu gạch dưới (_) được coi là một ký tự từ bên trong. Thay thế \ w, nếu bạn không muốn điều đó.
  • Điều này sẽ không hoạt động với (đơn) trích dẫn trong chuỗi.
  • Đặt bất kỳ dấu chấm câu bổ sung nào bạn muốn sử dụng ở nửa bên phải của biểu thức thông thường.
  • Bất cứ điều gì không được đề cập rõ ràng trong RE đều âm thầm bị rơi.

Đã trả lời ngày 15 tháng 12 năm 2008 lúc 1:53Dec 15, 2008 at 1:53

4

Đây là phiên bản nhận biết unicode:

re.findall(r"\w+|[^\w\s]", text, re.UNICODE)

Các chuỗi thay thế đầu tiên bắt được các chuỗi các ký tự từ (như được xác định bởi Unicode, vì vậy "Résumé" sẽ không biến thành

>>> c = "help, me"
>>> print c.split()
['help,', 'me']
3); Thứ hai bắt được các ký tự không từ cá nhân, bỏ qua khoảng trắng.

Lưu ý rằng, không giống như câu trả lời hàng đầu, điều này coi trích dẫn duy nhất là dấu câu riêng biệt (ví dụ: "Tôi" ->

>>> c = "help, me"
>>> print c.split()
['help,', 'me']
4). Điều này dường như là tiêu chuẩn trong NLP, vì vậy tôi coi đó là một tính năng.

Đã trả lời ngày 19 tháng 1 năm 2012 lúc 17:58Jan 19, 2012 at 17:58

LaclacLaC

12.6K5 Huy hiệu vàng37 Huy hiệu bạc38 Huy hiệu đồng5 gold badges37 silver badges38 bronze badges

1

Nếu bạn sẽ làm việc bằng tiếng Anh (hoặc một số ngôn ngữ phổ biến khác), bạn có thể sử dụng NLTK (có nhiều công cụ khác để làm điều này như Freeeling).

import nltk
nltk.download('punkt')
sentence = "help, me"
nltk.word_tokenize(sentence)

Hướng dẫn how do you split a sentence using punctuation in python? - làm thế nào để bạn tách một câu bằng dấu chấm câu trong python?

sh37211

1.2711 Huy hiệu vàng15 Huy hiệu bạc35 Huy hiệu Đồng1 gold badge15 silver badges35 bronze badges

Đã trả lời ngày 8 tháng 11 năm 2018 lúc 16:16Nov 8, 2018 at 16:16

Hướng dẫn how do you split a sentence using punctuation in python? - làm thế nào để bạn tách một câu bằng dấu chấm câu trong python?

1

Đây là mục của tôi.

Tôi nghi ngờ về việc điều này sẽ giữ được ý nghĩa hiệu quả như thế nào, hoặc nếu nó bắt được tất cả các trường hợp (lưu ý "!!!" được nhóm lại với nhau; điều này có thể hoặc không phải là một điều tốt).

>>> import re
>>> import string
>>> s = "Helo, my name is Joe! and i live!!! in a button; factory:"
>>> l = [item for item in map(string.strip, re.split("(\W+)", s)) if len(item) > 0]
>>> l
['Helo', ',', 'my', 'name', 'is', 'Joe', '!', 'and', 'i', 'live', '!!!', 'in', 'a', 'button', ';', 'factory', ':']
>>>

Một tối ưu hóa rõ ràng sẽ là biên dịch Regex trước khi tay (sử dụng re.compile) nếu bạn sẽ thực hiện việc này trên cơ sở từng dòng.

Đã trả lời ngày 15 tháng 12 năm 2008 lúc 1:30Dec 15, 2008 at 1:30

1

Đây là một bản cập nhật nhỏ cho việc thực hiện của bạn. Nếu bạn đang cố gắng làm bất cứ điều gì chi tiết hơn, tôi khuyên bạn nên xem xét NLTK mà Le Dorfier đề xuất.

Điều này chỉ có thể nhanh hơn một chút vì '' .join () được sử dụng thay cho +=, được biết là nhanh hơn.

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ result = re.findall(r"[\w'\"]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)
0

Đã trả lời ngày 15 tháng 12 năm 2008 lúc 1:05Dec 15, 2008 at 1:05

Hướng dẫn how do you split a sentence using punctuation in python? - làm thế nào để bạn tách một câu bằng dấu chấm câu trong python?

Monkutmonkutmonkut

40.7K23 Huy hiệu vàng120 Huy hiệu bạc149 Huy hiệu đồng23 gold badges120 silver badges149 bronze badges

3

Điều này làm việc cho tôi

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ result = re.findall(r"[\w'\"]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)
1

Đã trả lời ngày 21 tháng 4 năm 2020 lúc 8:41Apr 21, 2020 at 8:41

Hướng dẫn how do you split a sentence using punctuation in python? - làm thế nào để bạn tách một câu bằng dấu chấm câu trong python?

MalgomalgoMalgo

1.5631 Huy hiệu vàng15 Huy hiệu bạc 30 Huy hiệu Đồng1 gold badge15 silver badges30 bronze badges

Tôi nghĩ rằng bạn có thể tìm thấy tất cả sự giúp đỡ mà bạn có thể tưởng tượng trong NLTK, đặc biệt là vì bạn đang sử dụng Python. Có một cuộc thảo luận toàn diện về vấn đề này trong hướng dẫn.

Đã trả lời ngày 15 tháng 12 năm 2008 lúc 0:34Dec 15, 2008 at 0:34

Dkretzdkretzdkretz

37.1K13 Huy hiệu vàng80 Huy hiệu bạc136 Huy hiệu đồng13 gold badges80 silver badges136 bronze badges

Tôi đã đưa ra một cách để mã hóa tất cả các từ và các mẫu

>>> c = "help, me"
>>> print c.split()
['help,', 'me']
5 bằng cách sử dụng
>>> c = "help, me"
>>> print c.split()
['help,', 'me']
6 không cần mã hóa cứng:

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ result = re.findall(r"[\w'\"]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)
2

Ở đây

>>> c = "help, me"
>>> print c.split()
['help,', 'me']
7 là một mẫu phù hợp với bất cứ thứ gì không phải là không gian và
>>> c = "help, me"
>>> print c.split()
['help,', 'me']
8 được thêm vào để khớp với mã thông báo cuối cùng trong một chuỗi nếu đó là biểu tượng dấu câu.

Lưu ý những điều sau đây - điều này sẽ nhóm dấu chấm câu bao gồm nhiều hơn một biểu tượng:

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ result = re.findall(r"[\w'\"]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)
3

Tất nhiên, bạn có thể tìm và chia các nhóm như vậy với:

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ result = re.findall(r"[\w'\"]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)
4

Đã trả lời ngày 15 tháng 4 năm 2014 lúc 19:11Apr 15, 2014 at 19:11

Hướng dẫn how do you split a sentence using punctuation in python? - làm thế nào để bạn tách một câu bằng dấu chấm câu trong python?

FrauhahnhenfrauhahnhenFrauHahnhen

1332 Huy hiệu bạc11 Huy hiệu đồng2 silver badges11 bronze badges

Thử cái này:

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ result = re.findall(r"[\w'\"]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)
5

Hướng dẫn how do you split a sentence using punctuation in python? - làm thế nào để bạn tách một câu bằng dấu chấm câu trong python?

Aurasphere

3.74112 Huy hiệu vàng43 Huy hiệu bạc70 Huy hiệu đồng12 gold badges43 silver badges70 bronze badges

Đã trả lời ngày 18 tháng 4 năm 2017 lúc 9:03Apr 18, 2017 at 9:03

Bạn đã thử sử dụng Regex chưa?

http://docs.python.org/library/re.html#re-syntax


Nhân tiện. Tại sao bạn cần "," ở cái thứ hai? Bạn sẽ biết rằng sau mỗi văn bản được viết, tức là.

[0]

","

[1]

","

Vì vậy, nếu bạn muốn thêm "", bạn chỉ có thể làm điều đó sau mỗi lần lặp khi bạn sử dụng mảng ..

Đã trả lời ngày 14 tháng 12 năm 2008 lúc 23:34Dec 14, 2008 at 23:34

Filip Ekbergfilip EkbergFilip Ekberg

359K19 Huy hiệu vàng124 Huy hiệu bạc182 Huy hiệu đồng19 gold badges124 silver badges182 bronze badges

Trong trường hợp bạn không được phép nhập bất cứ thứ gì, hãy sử dụng điều này!

Copied!

import re my_str = """One, "Two" Three. Four! Five? I'm """ result = re.findall(r"[\w'\"]+|[,.!?]", my_str) # 👇️ ['One', ',', '"Two"', 'Three', '.', 'Four', '!', 'Five', '?', "I'm"] print(result)
6

Kosuke Sakai

2.1912 Huy hiệu vàng5 Huy hiệu bạc11 Huy hiệu đồng2 gold badges5 silver badges11 bronze badges

Đã trả lời ngày 27 tháng 11 năm 2019 lúc 9:14Nov 27, 2019 at 9:14