HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0622
Hikaru漢字の質問(たぶん不可能ですごめんなさい)10解決


Hikaru

リンク

2018/6/22(Fri) 16:54:17|NO.84643

HSPで漢字のへんやつくり、かんむり、あし等の
部分を取得する方法…多分ないですよね。
あればソースコード記載お願いします!



この記事に返信する


ソラ

リンク

2018/6/22(Fri) 21:56:04|NO.84644

まずはそういうデータベースを用意する必要があるかと。



あらや

リンク

2018/6/22(Fri) 22:12:11|NO.84645

>漢字のへんやつくり、かんむり、あし等の
>部分を取得する方法
元の漢字がテキストデータなのか、手書き文字なのか等で色々変わってきそうですし
『取得した部首』だけを強調表示したいとか、単に部首名などがわかればいいのかが不明ですが
パッと思いついたのが3通りほどあります。

1.(少なくとも私なら)絶対にやらない方法ですが
全ての漢字の部首をあらかじめデータとして登録しておく方法。
これはほぼ自力で辞書を作るのと同じですね。

2.OCR的な文字認識アルゴリズムを応用する方法。
私自身はやったことが無いので何とも言えませんが
もし出来るのならばこれが一番スマートな解決方法ではないでしょうか。

3.ネットのオンライン漢字辞書などを利用する方法。
調べたい漢字がテキストデータならば、その漢字のWEBページから
部首の箇所のソースをコピーするだけで比較的簡単に解決出来そうです。
ただ、そのWEBページの管理者の許可が必要になるかもしれません。


おおよそこんなところでしょうか。
どれも(特に1と2が)ソース化するのにかなり時間が掛かりそうなので
ソースは省略させていただきます。



Velgail

リンク

2018/6/23(Sat) 03:27:15|NO.84646

Unicodeは「概ね部首順」に並んでいます。
http://www.asahi-net.or.jp/~ax2s-kmtn/ref/unicode/cjku_radical.html

つまり、Unicodeに変換して、その値がどの範囲に含まれているかで、部首が簡易的に推定できるということになりますね!

:この実装に最低限必要な命令・関数一覧
cnvstow
wpeek



inovia

リンク

2018/6/23(Sat) 11:32:38|NO.84647

とりあえず作ってみた。(´・ω・`)
https://hsp.moe/#kanji



金欠師匠

リンク

2018/6/26(Tue) 08:19:16|NO.84654

>Hikaruさん
>あればソースコード記載お願いします!
ソースコードの記載だけでは何も知識が蓄積されないので、
そのソースコードからの一つ一つの仕組みを理解したほうが将来的には困りませんよ^^

失礼しましたm(-_-)m



Hikaru

リンク

2018/6/28(Thu) 21:08:49|NO.84655

>inoviaさん
ありがとうございます。
確かに部首を取得してますね。
部首を画面に出力するのではなく、
変数に代入するには、
どうすればいいですか。



Velgail

リンク

2018/6/29(Fri) 00:06:26|NO.84656

サンプルコード170行目を読んで、どうぞ。



Hikaru

リンク

2018/6/29(Fri) 03:17:28|NO.84658

170行目に確かに

mesW strParts(nPartIndex)
とありますが、
標準命令のmesを使ってないため、
変数に代入するのは難しいと思います。
もしそうでなければ、自分でやってました。



Velgail

リンク

2018/7/1(Sun) 18:04:18|NO.84695

mesWの定義はこれ

#module #deffunc mesW var p1 p2.0 = ginfo_cx, ginfo_cy, ginfo_winx, ginfo_winy DrawTextW@ hdc, varptr(p1), -1, varptr(p2), 0 return #global

で、ここで

#uselib "user32" #func GetWindowTextW "GetWindowTextW" int, var, int #func DrawTextW "DrawTextW" int, int, int, int, int #module #deffunc mesW var p1 p2.0 = ginfo_cx, ginfo_cy, ginfo_winx, ginfo_winy DrawTextW@ hdc, varptr(p1), -1, varptr(p2), 0 return #global sdim p1,64 cnvstow p1,"Hello World!" mesW p1 redraw 1
とすると、mesWを利用して文字が表示できますね。

よって、cnvstowの逆関数を使えば、容易に戻せますね(ただし文字コード上になかった場合は豆腐になります)
(一応検証済み。ちゃんと戻せます、使えます。)



Hikaru

リンク

2018/7/2(Mon) 16:50:45|NO.84708

ありがとうございます。
まだ未検証ですが、一様cnvwtosで戻せるようですね。
ありがとうございます。



ONION software Copyright 1997-2023(c) All rights reserved.