Kỹ thuật tốt để tìm kiếm mã thông báo văn bản


8

Chúng tôi đang tìm kiếm một cách để token hóa một số văn bản theo cách tương tự hoặc tương tự như một công cụ tìm kiếm sẽ làm điều đó.

Lý do chúng tôi đang làm điều này là để chúng tôi có thể chạy một số phân tích thống kê trên các mã thông báo. Ngôn ngữ chúng tôi đang sử dụng là python, vì vậy sẽ thích một kỹ thuật hoạt động trong ngôn ngữ đó, nhưng có lẽ có thể thiết lập một cái gì đó để sử dụng ngôn ngữ khác nếu cần thiết.

Thí dụ

Mã thông báo gốc:

Chúng tôi có một số burritos tuyệt vời!

Đơn giản hơn: (loại bỏ số nhiều và dấu câu)

Chúng tôi có một số burrito tuyệt vời

Thậm chí đơn giản hơn: (loại bỏ các từ thừa)

burrito tuyệt vời

Tốt nhất: (nhận ra ý nghĩa tích cực và tiêu cực):

burrito -poseitive-

Nhìn vào combinators phân tích cú pháp, đây là một thư viện parser combinator cho python valuedlessons.com/2008/02/... và khác ở đây pyparsing.wikispaces.com phân tích cú pháp combinators cho phép gần như DSL như cách tiếp cận để phân tích dựa trên những nỗ lực tương tự như trận đấu RegExp nhưng xa linh hoạt hơn / mạnh mẽ
Jimmy Hoffa

Cách tiếp cận khác xuất hiện trong đầu (nhưng cảm thấy một chút..funny ...) là chỉ cần viết cơ sở dữ liệu mã thông báo nơi bạn có mã thông báo duy nhất bạn muốn trong một bảng và bảng danh sách đen để mã thông báo loại bỏ và danh sách trắng bảng cho mã thông báo dupe nơi bạn có ID ánh xạ nhiều mã thông báo đến một trong các bản ghi mã thông báo trong bảng mã thông báo bạn muốn. Về cơ bản, một cơ sở dữ liệu từ điển dịch giữa hai ngôn ngữ mà bạn muốn trong đó một trong những ngôn ngữ chỉ là từ vựng được thu nhỏ mà "tuyệt vời" "tuyệt vời" "tuyệt vời" đều dịch sang cùng một thứ trong "-poseitive-"
Jimmy Hoffa

Câu trả lời:


7

Python có một bộ công cụ ngôn ngữ tự nhiên tuyệt vời, NLTK . Nó hỗ trợ tokenisation từ hộp:

>>> import nltk
>>> input = 'We have some great burritos!'
>>> tokens = nltk.word_tokenize(input)
>>> tokens
['We', 'have', 'some', 'great', 'burritos', '!']
>>> nltk.pos_tag(tokens)
[('We', 'PRP'), ('have', 'VBP'), ('some', 'DT'), ('great', 'JJ'), ('burritos', 'NNS'), ('!', '.')]

Cấu trúc cuối cùng bao gồm các thẻ ngôn ngữ tự nhiên, cho phép bạn bỏ các từ khỏi xem xét dựa trên phân loại của chúng. Bạn có thể muốn tập trung vào các thẻ JJ(tính từ) và NN-prefixed (danh từ).

Từ đó trở đi, bạn có thể áp dụng từ gốc và phát hiện các tính từ tích cực và tiêu cực.

Tôi tin rằng để phân loại tính từ, tuy nhiên, bạn cần tạo kho riêng của mình từ các tài nguyên trực tuyến như thế này ; thư viện cung cấp cho bạn các công cụ cho việc này.

Dưới đây là một ví dụ xuất phát bằng thuật toán xuất phát Porter:

>>> from nltk.stem.porter import PorterStemmer
>>> PorterStemmer().stem('burritos')
'burrito'

O'Reilly đã xuất bản một cuốn sách về thư viện, hiện đã có trên mạng .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.