|
長文失礼します。
人名については姓と名前はかなり登録されているようですが,その組み合わせ
である姓名となると実は無数と言ってもいいくらいあり,たとえMeCabのユー
ザー定義辞書に登録できるスキルがあっても,登録は事実上不可能だろうと思い
ます。それで出力された漢字を接続するやり方がやはり現実的かなと思います。
それで漢字熟語の問題も解決できそうです。
ただそうすると,副作用として不自然な結合が出てくるのは避けられません。
そこで,独立語のリストを作り,その単語については再度切り離すという方法は
どうかと考えてみました。
それを利用して元のマクロに追加したのが次のマクロです。
//---------------------------------------------//
$listfile= macrodir + "\\独立語リスト.txt";
#mainhandle = hidemaruhandle(0);
openfile "/h " + $listfile;
if( !result ) openfile $listfile;
#listhandle = hidemaruhandle(0);
gofiletop;
#lcount = linecount2;
while( #i < #lcount ) {
$word[#i] = gettext2( 0, lineno, linelen2, lineno );
if( $word[#i] == "" ) break;
moveto2 0, lineno + 1;
#i = #i + 1;
}
setactivehidemaru #mainhandle;
closehidemaru #listhandle;
$mainfile = filename2;
#mainhandle = hidemaruhandle(0);
setcompatiblemode 0x20f;
//MeCabのpath
$mecab = "c:\\Tools\\MeCab\\bin\\libmecab.dll";
begingroupundo;
loaddll "ht_tools.dll";
if(!result) {
message "ht_tools.dllが見つかりません";
endmacro;
}
if(!dllfunc("mecab_load",$mecab)) {
message "MeCabが見つかりません";
endmacro;
}
setsearch "[ -K]+",0x10;
gofiletop;
while(true) {
finddown2;
if(!result) break;
$text = gettext(foundtopx,foundtopy,foundendx, foundendy,1);
$new = dllfuncstr("mecab_wakati", "", $text);
insert " "+$new+" ";
}
#d = dllfunc("mecab_free");
freedll;
#subhandle = hidemaruhandle(0);
disabledraw;
replaceallfast "\\s+", "\\n", regular;
replaceallfast "^\\n", "", regular;
replaceallfast "(第?)(\\n)([0-90-9]*)(\\n)([次回年月日時分秒])",
"\\1\\3\\5", regular;
replaceallfast "([亜-K])(\\n)([亜-K])", "\\1\\3", regular;
replaceallfast "([亜-K])(\\n)([亜-K])", "\\1\\3", regular;
replaceallfast "([ァ-ヶー])(\\n)(・)(\\n)([ァ-ヶー])", "\\1\\3\\5",
regular;
#i = #i -1;
while( #i >= 0 ) {
replaceallfast "(" + $word[#i] + ")([亜-K])", "\\1\\n\\2",
regular;
#i = #i -1;
}
//記号類、ひらがな一文字の単語は(助詞、助動詞の可能性が高いので)削除
replaceallfast "^([ぁ-ん]|[、,。 「」『』?!?!.()()]*)\\n", "",
regular;
selectall;
filter "xsort.hmf","Uniq","2000001000000\" 0000011";
filter "xsort.hmf","XSort","10111121000000\"0000:000";
menu "頻度順","shift-jis順","文字列の長い順","文字列の短い順";
if(result == 1) {
changename filename+""+"_使用語一覧_頻度順"+filetype;
}
else if(result == 2) {
changename filename+"_使用語一覧_shift-jis順"+filetype;
filter "xsort.hmf","XSort","00100121000100\"0100:000";
}
else if(result == 3) {
changename filename+"_使用語一覧_文字列の長い順"+filetype;
filter "xsort.hmf","LSort","10121000100\":00";
}
else if(result == 4) {
changename filename+"_使用語一覧_文字列の短い順"+filetype;
filter "xsort.hmf","LSort","00121000100\":00";
}
escape;
closehidemaruforced #mainhandle;
openfile $mainfile;
setactivehidemaru #subhandle;
clearupdated;
question "保存しますか?";
if(result) SAVEAS;
endgroupundo;
endmacro;
//---------------------------------------------//
GO HIDESOFT
|
|