Khi xử lý văn bản, thường phải thao tác với chuỗi như là nối chuỗi, chia chuỗi thành các thành phần thông thường hoặc đổi thành chữ hoa hoặc chữ thường. Chúng ta sẽ thảo luận về các phương pháp nâng cao hơn để phân tích cú pháp và tách văn bản sau. Tuy nhiên, trong nhiều trường hợp, việc chia đoạn văn thành các dòng, các câu hoặc thậm chí các từ sẽ rất hữu ích. Cũng có trường hợp, ta cần loại bỏ một số ký tự trong các từ hoặc một từ sẽ cần được thay thế bằng một cách nào đó để có thể so sánh nó với một giá trị được xác định trước.
Bắt đầu
Chúng ta sử dụng một đoạn văn bản cơ bản và biến nó thành các thành phần chính; sau đó, chúng ta sẽ xây dựng lại nó. Ví dụ: một báo cáo cần được chuyển đổi sang một định dạng mới để được gửi qua email.
Dữ liệu input sử dụng trong ví dụ này là:
AFTER THE CLOSE OF THE SECOND QUARTER, OUR COMPANY, CASTAÑACORP
HAS ACHIEVED A GROWTH IN THE REVENUE OF 7.47%. THIS IS IN LINE
WITH THE OBJECTIVES FOR THE YEAR. THE MAIN DRIVER OF THE SALES HAS BEEN
THE NEW PACKAGE DESIGNED UNDER THE SUPERVISION OF OUR MARKETING DEPARTMENT.
OUR EXPENSES HAS BEEN CONTAINED, INCREASING ONLY BY 0.7%, THOUGH THE BOARD
CONSIDERS IT NEEDS TO BE FURTHER REDUCED. THE EVALUATION IS SATISFACTORY
AND THE FORECAST FOR THE NEXT QUARTER IS OPTIMISTIC. THE BOARD EXPECTS
AN INCREASE IN PROFIT OF AT LEAST 2 MILLION DOLLARS.
Chúng ta cần biên tập lại văn bản để loại bỏ bất kỳ tham chiếu nào đến các con số. Văn bản cũng cần phải được định dạng đúng bằng cách thêm một dòng mới sau mỗi dấu chấm, và điều chỉnh với 80 ký tự một dòng. Cuối cùng, văn bản nên được chuyển đổi thành mã ASCII vì lý do tương thích.
Văn bản sẽ được lưu trữ trong biến INPUT_TEXT
>>> INPUT_TEXT = '''
... AFTER THE CLOSE OF THE SECOND QUARTER, OUR COMPANY, CASTAÑACORP
... HAS ACHIEVED A GROWTH IN THE REVENUE OF 7.47%. THIS IS IN LINE
... '''
Thực hiện như thế nào ?
1. Sau khi nhập văn bản, hãy chia nó thành các từ riêng lẻ
>>> words = INPUT_TEXT.split()
2. Thay thế bất kỳ chữ số nào bằng ký tự ‘X’
>>> redacted = [''.join('X' if w.isdigit() else w for w in word) for word in words]
3. Chuyển văn bản thành ASCII thuần túy (lưu ý rằng tên của công ty có chứa ký tự ñ, không phải là ASCII)
>>> ascii_text = [word.encode('ascii', errors='replace').decode('ascii')
... for word in redacted]
4. Nhóm các từ thành các dòng 80 ký tự
>>> newlines = [word + '\n' if word.endswith('.') else word for word in ascii_text]
>>> LINE_SIZE = 80
>>> lines = []
>>> line = ''
>>> for word in newlines:
... if line.endswith('\n') or len(line) + len(word) + 1 > LINE_SIZE:
... lines.append(line)
... line = ''
... line = line + ' ' + word
...
5. Định dạng tất cả các dòng thành kiểu title và nối chúng thành một đoạn văn bản duy nhất
>>> lines = [line.title() for line in lines]
>>> result = '\n'.join(lines)
6. In kết quả
>>> print(result)
After The Close Of The Second Quarter, Our Company, Casta?Acorp Has
Achieved A Growth In The Revenue Of X.Xx%.
This Is In Line With The Objectives For The Year.
The Main Driver Of The Sales Has Been The New Package Designed
Under The Supervision Of Our Marketing Department.
Our Expenses Has Been Contained, Increasing Only By X.X%, Though The
Board Considers It Needs To Be Further Reduced.
The Evaluation Is Satisfactory And The Forecast For The Next Quarter
Is Optimistic.
The Board Expects An Increase In Profit Of At Least X Million