Edited at

Swift:【IME自作プロジェクト】かな漢字変換ライブラリ作成中


はじめに

カスタムキーボード作成の際ぶつかる最も大きな障壁はかな漢字変換だと思います.日本語変換に関するライブラリや情報があまりにも少ない!オープンソースとして使えるものはGoogleのMozcくらいなものです.しかし,Mozcの導入は非常に開発コストが高いのが現状です.そこで,兼ねてから日本語変換システムを自作しようと思いKaede Projectというのを水面下で進めていたのですが, その進捗が少し形になったので共有したいと思います.→さらに進捗出ました!(2018/10/25)


Kaede Project

GitHubにソースを公開しています.

https://github.com/Kyome22/Kaede

いい感じに完成したらCocoaPodsにでも公開しようと思います.


現状

ローマ字の入力をひらがなに変換する機能と単語の漢字変換候補リストを取得する機能ができました.

文脈を踏まえた長文の変換にはまだ対応しておらず,記号の変換などもほとんど対応してません.

→長文の先頭をかな漢字変換した結果のリストを取得できるようになりました.ユーザの選択とリストの更新&提示を繰り返すことで,実用可能です!



import UIKit

import Kaede

class ViewController: UIViewController {

let kaede = Kaede()

override func viewDidLoad() {
super.viewDidLoad()

}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let text1 = kaede.convertRomanToKana("saikou")
Swift.print(text1)
let res1 = kaede.requestCandidates(text)
Swift.print(res1)

let text2 = kaede.convertRomanToKana("kikaikagakunomati")
Swift.print(text2)
let res2 = kaede.requestCandidatesOfSentence(text)
Swift.print("Candidated:[")
for r in res2 {
Swift.print("\tBody: \(r.body), Reminder: \(r.remainder)")
}
Swift.print("]")
}
}


実行結果


さいこう

["最高", "再興", "採鉱", "再校", "サイコウ", "サイコウ", "さいこう"]

きかいかがくのまち

Candidated:[

Body: 機械化, Reminder: がくのまち

Body: きかいか, Reminder: がくのまち

Body: キカイカ, Reminder: がくのまち

Body: キカイカ, Reminder: がくのまち

Body: 器械, Reminder: かがくのまち

Body: 棋界, Reminder: かがくのまち

Body: 機会, Reminder: かがくのまち

Body: 機械, Reminder: かがくのまち

Body: きかい, Reminder: かがくのまち

Body: キカイ, Reminder: かがくのまち

Body: キカイ, Reminder: かがくのまち

Body: 奇禍, Reminder: いかがくのまち

Body: 奇貨, Reminder: いかがくのまち

Body: 幾何, Reminder: いかがくのまち

Body: 帰化, Reminder: いかがくのまち

Body: 気化, Reminder: いかがくのまち

Body: 貴下, Reminder: いかがくのまち

Body: 貴家, Reminder: いかがくのまち

Body: 麾下, Reminder: いかがくのまち

Body: きか, Reminder: いかがくのまち

Body: キカ, Reminder: いかがくのまち

Body: キカ, Reminder: いかがくのまち

Body: 黄, Reminder: かいかがくのまち

Body: 基, Reminder: かいかがくのまち

Body: 奇, Reminder: かいかがくのまち

Body: 忌, Reminder: かいかがくのまち

Body: 期, Reminder: かいかがくのまち

Body: 機, Reminder: かいかがくのまち

Body: 気, Reminder: かいかがくのまち

Body: 季, Reminder: かいかがくのまち

Body: 紀, Reminder: かいかがくのまち

Body: 記, Reminder: かいかがくのまち

Body: 貴, Reminder: かいかがくのまち

Body: 騎, Reminder: かいかがくのまち

Body: 木, Reminder: かいかがくのまち

Body: き, Reminder: かいかがくのまち

Body: キ, Reminder: かいかがくのまち

Body: キ, Reminder: かいかがくのまち

Body: きかいかがくのまち, Reminder:

Body: キカイカガクノマチ, Reminder:

Body: キカイカガクノマチ, Reminder:

]



導入方法

Kaede.frameworkをプロジェクトに突っ込んで,Embedded BinariesLinked Frameworks and Librariesに追加すればOKです.

あとは使いたいところでimport Kaedeしてください.