Top(FrontPage)
トップページへ
[
一覧
|
検索
|
最終更新
] [
差分
|
履歴
]
ツール
ヘルプ
新規
開始行:
*OnTranslateの使い方 [#zeb01750]
質問があったので、使い方の簡単な例を書いてみました。
&color(red){aya_aitalk.dic};の先頭あたりの
#code(aya,nonumber,nooutline,nolink){{
//OnTranslate
//{
// REPLACE(reference0, "。", "にゅ。")
//}
}}
とコメントにして無効化している部分を以下に置き換えます。
#code(aya,nonumber,nooutline,nolink){{
OnTranslate
{
//とりあえず最初のおまじない(一時変数にとりあえず代入)
_text = reference0
//勝手にスクリプトにウエイトをかける例
_text = REPLACE(_text, "、", "、\w5")
_text = REPLACE(_text, "。", "。\w5")
_text = REPLACE(_text, "…", "…\w5")
//敬称置換の例
//例外は先に書いておく
_text = REPLACE(_text, "たん殿", "たん")
//「さん殿」とかだぶりそうなのを置換
_text = RE_REPLACE(_text,"(ちゃん|くん|さん|殿)殿","殿")
//ここはおまじないのつもりで。消しちゃだめです。
//(一時変数で置き換え処理したものを結果として返す)
_text
}
}}
*解説 [#jac8cc30]
OnTranslateは、ゴーストがしゃべるスクリプトをまとめて後で...
語尾を変えてみたり、敬称をつける際にだぶる現象を回避して...
_text = REPLACE(_text, "たん殿", "たん")
「たん殿」を「たん」に置換しています。~
後ろの2つの " " はそれぞれ、置き換え前、置き換え後の言葉...
_text = RE_REPLACE(_text,"(ちゃん|くん|さん|殿)殿","殿")
「ちゃん殿」「くん殿」「さん殿」「殿殿」とだぶってマズそ...
*改造メモ [#ra3b6cf0]
**敬称がらみ [#v20903e2]
ほかにも、たとえば「様殿」もなんとかしたい場合は、
(ちゃん|くん|さん|殿)
と、括弧でくくって | 区切りにしてある部分に追加して
(ちゃん|くん|さん|殿|様)
とすると良いでしょうし、また、うちのゴーストでは「殿」を...
_text = RE_REPLACE(_text,"(ちゃん|くん|さん|殿|様|さま)...
と、こんな感じでしょうか。
**自動ウエイトもどきがらみ [#s3f9e8ff]
たとえば
_text = REPLACE(_text, "!", "!\w5")
_text = REPLACE(_text, "?", "?\w5")
とした場合に、~
「!!!」や「???」が~
!\w5!\w5!\w5 ?\w5?\w5?\w5~
……に置換されてしまい、なんだか微妙です。
_text = RE_REPLACE(_text ,'!(?=[^!\\])', '!\w5')
_text = RE_REPLACE(_text ,'?(?=[^?\\])', '?\w5')
ちょっとややこしい正規表現なので解説は控えますが、これで...
**自動ウエイト:さらにパーフェクトな方法 [#m6c99fbd]
上記方法ですとタグ内部などまで置換されてひどい目に遭いま...
そのへんを解決した関数を以下に用意しました。
2020/3/29更新 EVAL内部での不要な変数展開を削除
#code(aya,nonumber,nooutline,nolink){{
TextOnlyTranslator
{
_string = RE_SPLIT(_argv[0],'\\(\\|q\[.*?\]\[.*?\]|[!&8c...
_n = ARRAYSIZE(_string)
_tag = RE_GETSTR()
_tr = ''
_qs = 0
for _i = 0 ; _i < _n ; _i++ {
_tr += EVAL("%(_argv[1])(_string[_i],_qs)")
_tr += _tag[_i]
if '\_q' _in_ _tag[_i] {
_qs = ! _qs
}
}
_tr
}
TextOnlyTranslatorFunc
{
//_argv[0] = 置換対象テキスト
//_argv[1] = クイックセクション内か否か
_text = _argv[0]
if ! _argv[1] {
_text = REPLACE(_text, "、", "、\w5")
_text = REPLACE(_text, "。", "。\w9")
_text = REPLACE(_text, "…", "…\w9")
_text = REPLACE(_text, "?", "?\w9")
_text = RE_REPLACE(_text , '\n\n(?=[^\[])', '\w9\n\n')
_text = RE_REPLACE(_text ,'!(?=[^!])', '!\w9')
}
_text
}
}}
使い方は以下のコードを一番上のOnTranslateの中に(自動ウエ...
_text = TextOnlyTranslator(_text,'TextOnlyTranslatorFun...
正規表現は、[[ukiya:正規表現講座/おまけ1]]を使っています。
終了行:
*OnTranslateの使い方 [#zeb01750]
質問があったので、使い方の簡単な例を書いてみました。
&color(red){aya_aitalk.dic};の先頭あたりの
#code(aya,nonumber,nooutline,nolink){{
//OnTranslate
//{
// REPLACE(reference0, "。", "にゅ。")
//}
}}
とコメントにして無効化している部分を以下に置き換えます。
#code(aya,nonumber,nooutline,nolink){{
OnTranslate
{
//とりあえず最初のおまじない(一時変数にとりあえず代入)
_text = reference0
//勝手にスクリプトにウエイトをかける例
_text = REPLACE(_text, "、", "、\w5")
_text = REPLACE(_text, "。", "。\w5")
_text = REPLACE(_text, "…", "…\w5")
//敬称置換の例
//例外は先に書いておく
_text = REPLACE(_text, "たん殿", "たん")
//「さん殿」とかだぶりそうなのを置換
_text = RE_REPLACE(_text,"(ちゃん|くん|さん|殿)殿","殿")
//ここはおまじないのつもりで。消しちゃだめです。
//(一時変数で置き換え処理したものを結果として返す)
_text
}
}}
*解説 [#jac8cc30]
OnTranslateは、ゴーストがしゃべるスクリプトをまとめて後で...
語尾を変えてみたり、敬称をつける際にだぶる現象を回避して...
_text = REPLACE(_text, "たん殿", "たん")
「たん殿」を「たん」に置換しています。~
後ろの2つの " " はそれぞれ、置き換え前、置き換え後の言葉...
_text = RE_REPLACE(_text,"(ちゃん|くん|さん|殿)殿","殿")
「ちゃん殿」「くん殿」「さん殿」「殿殿」とだぶってマズそ...
*改造メモ [#ra3b6cf0]
**敬称がらみ [#v20903e2]
ほかにも、たとえば「様殿」もなんとかしたい場合は、
(ちゃん|くん|さん|殿)
と、括弧でくくって | 区切りにしてある部分に追加して
(ちゃん|くん|さん|殿|様)
とすると良いでしょうし、また、うちのゴーストでは「殿」を...
_text = RE_REPLACE(_text,"(ちゃん|くん|さん|殿|様|さま)...
と、こんな感じでしょうか。
**自動ウエイトもどきがらみ [#s3f9e8ff]
たとえば
_text = REPLACE(_text, "!", "!\w5")
_text = REPLACE(_text, "?", "?\w5")
とした場合に、~
「!!!」や「???」が~
!\w5!\w5!\w5 ?\w5?\w5?\w5~
……に置換されてしまい、なんだか微妙です。
_text = RE_REPLACE(_text ,'!(?=[^!\\])', '!\w5')
_text = RE_REPLACE(_text ,'?(?=[^?\\])', '?\w5')
ちょっとややこしい正規表現なので解説は控えますが、これで...
**自動ウエイト:さらにパーフェクトな方法 [#m6c99fbd]
上記方法ですとタグ内部などまで置換されてひどい目に遭いま...
そのへんを解決した関数を以下に用意しました。
2020/3/29更新 EVAL内部での不要な変数展開を削除
#code(aya,nonumber,nooutline,nolink){{
TextOnlyTranslator
{
_string = RE_SPLIT(_argv[0],'\\(\\|q\[.*?\]\[.*?\]|[!&8c...
_n = ARRAYSIZE(_string)
_tag = RE_GETSTR()
_tr = ''
_qs = 0
for _i = 0 ; _i < _n ; _i++ {
_tr += EVAL("%(_argv[1])(_string[_i],_qs)")
_tr += _tag[_i]
if '\_q' _in_ _tag[_i] {
_qs = ! _qs
}
}
_tr
}
TextOnlyTranslatorFunc
{
//_argv[0] = 置換対象テキスト
//_argv[1] = クイックセクション内か否か
_text = _argv[0]
if ! _argv[1] {
_text = REPLACE(_text, "、", "、\w5")
_text = REPLACE(_text, "。", "。\w9")
_text = REPLACE(_text, "…", "…\w9")
_text = REPLACE(_text, "?", "?\w9")
_text = RE_REPLACE(_text , '\n\n(?=[^\[])', '\w9\n\n')
_text = RE_REPLACE(_text ,'!(?=[^!])', '!\w9')
}
_text
}
}}
使い方は以下のコードを一番上のOnTranslateの中に(自動ウエ...
_text = TextOnlyTranslator(_text,'TextOnlyTranslatorFun...
正規表現は、[[ukiya:正規表現講座/おまけ1]]を使っています。
ページ名: