Tôi phải chia một tệp văn bản thành một số từ cụ thể cho mỗi danh sách, có lẽ được hiển thị rõ nhất trong một ví dụ.
Giả sử tệp văn bản trông như thế này
"Hôm nay tôi có một ngày tốt lành"
Tôi phải viết một hàm như dưới đây
ngrams.makeNGrams("ngrams.txt", 2)
#so vì biến đã cho ghi 2 nên kết quả đầu ra sẽ như thế này:
[['tôi', 'tôi'],['am', 'có'],['có', 'a'],['a','tốt'],['tốt', 'ngày'] ,['ngày','hôm nay']]
Nếu chức năng trông như thế này
ngrams.makeNGrams("ngrams.txt", 3)
#nó sẽ đưa ra:
[['tôi','am','có'],['có','a','tốt'],['tốt','ngày','hôm nay']]
Bây giờ có ai biết tôi nên xử lý việc này như thế nào tốt nhất không? cảm ơn bạn rất nhiều trước
我会这样做:
def ngrams(từ, n):
return zip(*(words[i:] for i in range(n)))
cách sử dụng:
>>> Words = "Hôm nay tôi có một ngày tốt lành".split()
>>> danh sách(ngrams(từ, 2))
[('tôi', 'am'), ('am', 'có'), ('có', 'a'), ('a', 'tốt'), ('tốt', 'ngày') , ('ngày', 'hôm nay')]
>>> danh sách(ngrams(từ, 3))
[('tôi', 'tôi', 'có'), ('am', 'có', 'a'), ('có', 'a', 'tốt'), ('a', 'tốt ', 'ngày'), ('tốt', 'ngày', 'hôm nay')]
Ý tưởng là tạo ra từ danh sách ban đầun
danh sách, nơi danh sách thứ i di chuyểnTôi
. Sau đó chỉ cần chuyển những danh sách nàyzip
cùng nhau và trả về kết quả.
n=3
Trực quan hóa:
['i', 'am', 'có', 'a', 'tốt', 'ngày', 'hôm nay'] # không bị dịch chuyển
['am', 'có', 'a', 'tốt', 'ngày', 'hôm nay'] # dịch chuyển 1
['có', 'a', 'tốt', 'ngày', 'hôm nay'] # dịch chuyển 2
zip
Hàm này ghép các phần tử lại với nhau ở cùng một chỉ mục cho đến khi hết danh sách ngắn nhất, tạo ra kết quả mong muốn.
Tôi là một lập trình viên xuất sắc, rất giỏi!