1 số Gem hỗ trợ xử lý ngôn ngữ tự nhiên trên ruby
Theo xu hướng phát triển hiện tại ngày càng nhiều công việc trước kia phải do con người làm nay đã được thay thế và xử lý bởi máy móc với tốc độ cao cùng sự chính xác ổn định. Đặc biêt nhờ sự phát triển trong mảng xử lý ngôn ngữ tự nhiên mà máy móc đã có thể hiểu và xử lý / hỗ trợ tốt các yêu cầu ...
Theo xu hướng phát triển hiện tại ngày càng nhiều công việc trước kia phải do con người làm nay đã được thay thế và xử lý bởi máy móc với tốc độ cao cùng sự chính xác ổn định. Đặc biêt nhờ sự phát triển trong mảng xử lý ngôn ngữ tự nhiên mà máy móc đã có thể hiểu và xử lý / hỗ trợ tốt các yêu cầu của người dùng. Sau đây mình sẽ giới thiệu với các bạn 1 số ứng dụng trong việc xử lý ngôn ngữ tự nhiên trên ROR
Đầu tiên mình xin giới thiệu Gem hỗ trợ phát hiễn lỗi chính tả / ngữ pháp(tiếng anh) mà theo quảng cáo là dựa vào ngữ cảnh của câu văn và so sánh với hàng tỉ (shock) các câu tương tự trên mạng. Và Gem Gingerice là gem mà mình muốn nói đến. Để cài đặt gem thì giống như mọi khi, bạn có thể cài đặt bằng cách add vào trong Gemfile
#Gemfile gem 'gingerice'
và chạy bundle để cài
$ bundle
hoặc chạy
$ gem install gingerice
Việc sử dụng gem này cũng khá đơn giản, bạn xem ở ví dụ sau
require 'gingerice' # khai báo dùng thư viện gingerice text = 'The smelt of fliwers bring back memories.' # câu sai chính tả + ngữ pháp parser = Gingerice::Parser.new # khởi tạo object để kiểm tra lỗi parser.parse text # kiểm tra lỗi #output { "text" => "The smelt of fliwers bring back memories.", "result" => "The smell of flowers brings back memories.", "corrections" => [ [0] { "text" => "smelt", "correct" => "smell", "definition" => nil, "start" => 4, "length" => 5 }, [1] { "text" => "fliwers", "correct" => "flowers", "definition" => "a plant cultivated for its blooms or blossoms", "start" => 13, "length" => 7 }, [2] { "text" => "bring", "correct" => "brings", "definition" => nil, "start" => 21, "length" => 5 } ] }
ta có thể dễ dàng thấy câu đã được Gingerice sửa lại cùng thông tin chi tiết về các lỗi trong câu văn đó. Ứng Dụng Gem này có khả năng áp dụng ở rất nhiều lĩnh vực như giáo dục giúp người dùng tự học và kiểm tra lỗi, hoặc giúp người viết văn bản kiểm tra và hạn chế các lỗi khi viết báo cáo, tài liệu ...
Gingerice còn hỗ trợ luôn lệnh trên terminal cho người dùng sử dụng trực tiếp
$ gingerice "Edwards will be sck yesterday" Edwards was sick yesterday
bạn có thể dùng thêm --verbose hoặc -v để xem thông tin chi tiết
$ gingerice --verbose "Edwards will be sck yesterday" { "text" => "Edwards will be sck yesterday", "result" => "Edwards was sick yesterday", "corrections" => [ [0] { "text" => "will be", "correct" => "was", "definition" => nil, "start" => 8, "length" => 7 }, [1] { "text" => "sck", "correct" => "sick", "definition" => "affected by an impairment of normal physical or mental function", "start" => 16, "length" => 3 } ] }
Gem whatlanguage có thể nhận diện ngôn ngữ Dutch, English, Farsi, French, German, Italian, Pinyin, Swedish, Portuguese, Russian, Arabic, Finnish, Greek, Hebrew, Hungarian, Korean, Norwegian, Polish và Spanish với tốc độ và hiệu suất cao.
Để cài đặt ta thêm
#Gemfile
gem whatlanguage
Sử dụng rất đơn giản
Ví dụ:
text1 = "Deux autres personnes ont été arrêtées durant la nuit" text2 = "اللغة التي هي هذه؟" wl = WhatLanguage.new(:all) #khai báo WhatLanguage wl.language(text) #output: :french wl.language(text2) #output: :arabic wl.process_text(text1) #output: {:french=>8, :italian=>2, :farsi=>1, :swedish=>1, :danish=>3, :finnish=>3, :russian=>3, :english=>2, :norwegian=>2, :polish=>2, :spanish=>2, :hungarian=>2, :dutch=>1, :arabic=>1, :pinyin=>1, :greek=>1, :hebrew=>1, :portuguese=>1} # độ chính xác ngôn ngữ ứng với mẫu câu nhập vào
Dựa vào kết quả process_text thì ta có thể quyết định đượckết quả trả về có đáng tin hay không
ví dụ:
wl.process_text("Sử dụng rất đơn giản") => {:french=>2, :russian=>3, :spanish=>1, :portuguese=>1}
Ta có thể thấy đây là kết quả là :french là ko đáng tin và không nên sử dụng. Ngoài ra bạn có thể giới giạn ngôn ngữ có thể trả ra khi kiểm tra để loại bỏ bớt các yếu tố nhiễu
# chỉ trả kết quả là ngôn ngữ Englis, german hoặc french wl = WhatLanguage.new(:english, :german, :french)
Có 1 điều thú vị là bạn có thể sử dụng gem whatlanguage trên kết hợp với gem google-api-client là gem dịch dựa trên Google Translate để ứng dụng vào hệ thống của bạn (ví dụ như tìm kiếm theo key word với nhiều ngôn ngữ, tự động tìm và dịch các dữ liệu để đưa kết quả cho người dùng ...).
Để cài đặt gem bạn cần thêm vào Gemfile
#Gemfile gem 'google-api-client', '0.9'
và chạy lệnh bundle để cài đặt
$ bundle
Để sử dụng tính năng dịch của google bạn cần tạo 1 tài khoản để sử dụng dịch vụ API translate của google, bạn có thể đăng kí dùng free trong 60 ngày và google sẽ cho bạn 300$$tiền tài khoản để sử dụng dịch vụ. Các bạn có thể tìm hiểu và đăng ký ở đây .
Phần đăng ký cần thông tin thẻ visa và bạn yên tâm là chảng may bạn đăng ký rồi quên bẵng mất, thì bạn sẽ chưa mất đồng nào cả vì sau khi hết hạn dùng free thì cần phải xác thực thông báo từ google thì dịch vụ mới tiếp tục và tính tiền.
Sau khi đăng ký xong tài khoản bạn sẽ có 1 trang dashboard như thế này
Để kích hoạt api translate bạn cần vào phần Enable and get credentials like key rồi chọn tranlsate api để kích hoạt. Sau khi kích hoạt Google sẽ cho 1 key để sử dụng.
Trở lại với gem, để sử dụng chức năng dịch đoạn văn bản bạn cần khai báo theo ví dụ sau
require 'google/apis/translate_v2' # load module dịch của gem translate = Google::Apis::TranslateV2::TranslateService.new # khởi tạo đối tượng để dịch translate.key = 'YOUR_API_KEY_HERE' # nhập key mà google đã cho bạn sau khi đăng ký result = translate.list_translations('Hello world!', 'es', source: 'en') #các biến được truyền vào đó là nội dung cần dịch, ngôn ngữ muốn dịch, ngồn ngữ của đoạn nội dung bạn nhập #output Sending HTTP get https://www.googleapis.com/language/translate/v2?key=AIzaSyAxVfTrtxQXzLc9UtzJMgTFCVS6k_jcTQA&q=Hello%20world%21&source=en&target=es 200 #<Hurley::Response GET https://www.googleapis.com/language/translate/v2?key=AIzaSyAxVfTrtxQXzLc9UtzJMgTFCVS6k_jcTQA&q=Hello%20world%21&source=en&target=es == 200 (90 bytes) 659ms> Success - #<Google::Apis::TranslateV2::ListTranslationsResponse:0x00000005936408 @translations= [#<Google::Apis::TranslateV2::TranslationsResource:0x00000005934a68 @translated_text="¡Hola Mundo!">]> => #<Google::Apis::TranslateV2::ListTranslationsResponse:0x00000005936408 @translations=[#<Google::Apis::TranslateV2::TranslationsResource:0x00000005934a68 @translated_text="¡Hola Mundo!">]> puts result.translations.first.translated_text #output ¡Hola Mundo! => nil
Đây là cách sử dụng cơ bản, để biết thêm nhiều tính năng sâu hơn của gem bạn có thể vào đây.
Lời kết: xử lý ngôn ngữ tự nhiên là 1 mảng rất rộng lớn và có rất nhiều khả năng áp dụng vào cuộc sống. Thực tế bạn đã và đang dùng rất nhiều dịch vụ liên quan đến nó, ví dụ voice recognizer trên win thục thi các hành động dựa theo lời nói hay tư vấn viên như siri của apple ... Và mình nghĩ rằng nếu bạn có ý tưởng nào đó thú vị thì có thể thử áp dụng và xây dựng dựa trên các nguồn dữ liệu tài nguyên đã có sẵn như gem trên để làm.
PS: nếu bạn quan tâm đến xử lý ngôn ngữ tự nhiên trên ruby các bạn nên tham thảo thử ở đây, nơi tổng hợp rất nhiều thứ hay ho về NLP (nature language processing)
Tham khảo:
-
https://github.com/diasks2/ruby-nlp A collection of Natural Language Processing (NLP) Ruby libraries, tools and software. Suggestions and contributions are welcome.
-
https://github.com/subosito/gingerice gem gingerice
-
https://github.com/peterc/whatlanguage gem whatlanguage
-
https://github.com/google/google-api-ruby-client gem google-api-client