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 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

1. Gingerice

Đầ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
        }
    ]
}

2. Gem whatlanguage để xác định ngôn ngữ

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 ...).

3. Gem google-api-client

Để 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

Screenshot from 2016-05-31 15:29:27.png

Để 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:

All Rights Reserved