| 著作一覧 |
Bing Spell Check APIで日本語もチェックできる(ただし、mode=spellのみ)というので試しているのだが、全然、わけがわからなくて閉口している。
次のようなクラスでテストしてみる。
# coding: utf-8
require 'net/http'
require 'uri'
require 'json'
class BingSpellChecker
KEY1 = '登録して得られたキー'.freeze
# マーケットはja-JP、言語はja、モードはspell(proofモードは対応していないので英語チェックになるらしい)
URL = 'https://api.cognitive.microsoft.com/bing/v7.0/spellcheck?mkt=ja-JP&setLang=ja&mode=spell'.freeze
@@uri = nil
def initialize(logger = Rails.logger)
@logger = logger
unless @@uri
@@uri = URI.parse(URL)
end
end
def check(text)
@logger.debug @@uri.request_uri
req = Net::HTTP::Post.new(@@uri.request_uri,
'Content-Type' => 'application/x-www-form-urlencoded',
'Ocp-Apim-Subscription-Key' => KEY1)
req.set_form_data('text' => text)
resp = Net::HTTP.start(@@uri.host, @@uri.port, use_ssl: @@uri.scheme == 'https') do |h|
h.request(req)
end
# 最初mode=proofで試していたがまったく日本語は無視されているのでマーケットとして
# 何を認識しているのか確認するためにレスポンスヘッダをログした名残
resp.each_header do |nm, val|
@logger.debug "#{nm}=#{val}"
end
r = JSON.parse(resp.body)
@logger.debug JSON.pretty_generate(r)
if resp.code == '200'
[] # 実際は応答データを元に都合が良いStructのインスタンス配列にしているが省略
else
return resp.code
end
end
end
たとえば、次の文を送ると、まあ検出されるのだが嬉しくない。
にぽんごが間違えている。
結果のJSON:
{
"_type": "SpellCheck",
"flaggedTokens": [
{
"offset": 4,
"token": "が間違えて",
"type": "UnknownToken",
"suggestions": [
{
"suggestion": "が 間違えて",
"score": 1
}
]
}
],
"correctionType": "High"
}
分かち書きしろと? というか「にぽんご」はOKなのかなぁ。
で、気を取り直して、もう少し長い文章にしてみる。
にぽんごむずかしい。そもそもにぽんごむつかしいから、にぽんごが間違えている。
結果のJSON:
{
"_type": "SpellCheck",
"flaggedTokens": [
]
}
OKになってしまった……というか試していると複文は何をしても(と言っても限界はあるが)OKとなる。そういうものなのか? 確かにサンプルは1文だしなぁ。
追記:どうも本当に1単語のスペルチェックみたいだ。「グローパル」でかけたら「グローバル」と出てきた……。カンマで区切ると複数単語も行ける(「デシプリン,風鈴火山」→「ディシプリン,風林火山」)が、使形態素解析して名詞だけ拾ってとかしないと使えないのか……
だんだん嫌になってきたが、「問題は、グローパル基準です。」は文だけどグローパルを正しく指摘するが、「問題は、グローパル基準にあります。」だと指摘されないとか、結局mode=proofがサポートされていない以上、正しく単語を抽出してチェックできない、ということみたいだ。将来に期待、かな(APIは使いやすいのでとても良いのだが残念)
ジェズイットを見習え |