とりあえず暇だったし何となく始めたブログ このページをアンテナに追加 RSSフィード

UNIX 系企業のぺーぺー

最近は、twitterでつぶやくのが楽で、そっちばかりになってます。IDは同じ khiker でやってます。

トラックバック/コメント歓迎・反応は遅くなることがあります。コメント、トラックバックがあるとメールで通知されるので、過去のエントリにコメントされても気付きます。

2007/05/03

[] Emacsテキスト翻訳をする elisp

text-translator は, テキスト翻訳サービスを提供するウェブサイトを利用して

Emacs 上で文字列の翻訳を行う elisp パッケージです.

ダウンロード

友人鯖の復旧がちょっとすぐにはできそうにないので、EmacsWikiに置きました。お手数ですが、1つ1つ落として下さい。すみません(2009,7/4)。

また、開発は、Launchpad 上で行っています。開発版は以下におかれますので、EmacsWiki に置いてあるものより新しく、そして buggy です。

下記リンクは現在利用できないと思われます。申し分けありません。

使用法

0.5.0 以降では, ダウンロードの項目から圧縮ファイルをダウンロードしてきて,

そのファイルを解凍し,

中にある text-translator.el と text-translator-vars.el を Emacs のロードパスの通った所へ置いてください.


0.5.0 未満ならば, ダウンロードしてきたファイル text-translator.el をそのまま

ロードパスのとおった所へ置けば終了です.


ロードパスにファイルを置いたら, 以下のような設定を .emacs に書いてください.

この式を Emacs を再起動するなりして, 評価すれば完了です.

;; require でも autoload でもおすきな方をどうぞ.
;; 最近だと, require の方が推奨されているとのことです.

;;(autoload 'text-translator "text-translator" "Text Translator" t)
(require 'text-translator)

(global-set-key "\C-x\M-t" 'text-translator)
(global-set-key "\C-x\M-T" 'text-translator-translate-last-string)

;; プリフィックスキーを変更する場合.
;; (setq text-translator-prefix-key "\M-n")

ここで C-xM-t に割り当てている関数 text-translator は, リージョンの選択が行われている範囲を翻訳します.

リージョンの選択が行われていないと, 翻訳する文字列の入力を促します.

C-u などの接頭辞を付けて関数を起動することで, 使用する翻訳サイトを選択できます.

デフォルトで使用する翻訳サイトは, google英語から日本語への翻訳です.

2回目以降は, 前回使用した形式で翻訳を行います.


ここで C-xM-T に割り当てている関数 text-translator-translate-last-string は,

前回使用した文字列を使用して翻訳を行います.

関数を起動すると, 使用する翻訳サイトの選択が促されます.


text-translator 用メジャーモードのプリフィックスキーは, 最初は, C-c となっています.

変更したい場合は, 上記例にあるように記述してください.

上記例のように書くと, M-n がプリフィックスキーとなります.


このプリフィックスキーの変更は, 最初に関数 text-translator や関数

text-translator-translate-last-string が実行されたときに行われます.

一度それらを実行した後にこのプリフィックスキーを変更しても, 変更は有効になりません.


また, 0.5.0 以降では, 日本語と英語の場合のみ, 以下の設定を .emacs に書くことで,

英語から日本語に翻訳するのか, 日本語から英語に翻訳するのかを自動選択して翻訳することができます.

;; 自動選択に使用する関数を設定
(setq text-translator-auto-selection-func
      'text-translator-translate-by-auto-selection-enja)
;; グローバルキーを設定
(global-set-key "\C-xt" 'text-translator-translate-by-auto-selection)

ここで C-xt にキーを割り当てている text-translator-translate-by-auto-selection は,

変数 text-translator-auto-selection-func の値にある関数を使って,

翻訳サイトの自動選択をしています.

ここでは, 自動選択をする関数に text-translator-translate-by-auto-selection-enja を使っています.

この関数は, 翻訳したい文字列に含まれるアルファベットの割合を見て,

英語から日本語か, 日本語から英語かを振り分けています.


その他, 使用できるキーなど, 詳しくは README ファイルを参照してください.

0.5.0 未満ならば, text-translator.el の頭にあるコメントを参照して下さい.

使用できる翻訳サイト

翻訳サイトは, デフォルトで以下のものが利用できます.

基本的に, そのサイトが使える全ての形式を使えるようにしたはずです.

もし追加漏れがあったら, 教えて頂けると幸いです.

コメント

プロキシに対応しており, デフォルトで環境変数 HTTP_PROXY を参照します.

また, 上記以外にも使用できる関数があります.

詳しくは, README ファイルを参照して下さい.

0.5.0 未満ならば, text-translator.el の頭にあるコメントを参照して下さい.


また, バグを発見した場合やこのパッケージへの意見やコメント, 要望がある場合は,

ファイル先頭の方に書いてある私(khiker)のメールアドレスに向けてメールするか,

このエントリや関連するエントリにコメントして下さい.

遠慮なくして下さって結構です.

返事が遅くなる場合もあるかもしれませんが, ご了承下さい.

最新版での変更点

0.6.6での変更点

  • fresheye
    ソースHTMLから翻訳結果を抜き出す正規表現を修正.
  • livedoor
    POSTする値を修正.
  • altavista
    廃止.yahoo.comに.
  • plusさんのパッチをとりこみ
    • docstringの書式修正
    • ファイルのコーディングシステムの修正
    • 英文コメントの修正
    • elispの修正
    • text-translator-get-engine-type-or-siteの追加.

0.6.6.1での変更点
  • freetranslation.com
    ソースHTMLから翻訳結果を抜き出す正規表現を修正(全部の形式).
  • fresheye
    ソースHTMLから翻訳結果を抜き出す正規表現を修正(日本語←→英語相互のみ)
0.6.6.2での変更点

正規表現と文字コードの修正のみです。機能に変更はありません。

  • freetranslation.comが動かなくなっていた件を修正。
  • fresheye.comが動かなくなっていた件を修正。
  • excite.co.jpが動かなくなっていた件を修正。
  • livedoor.comが動かなくなっていた件を修正。

以前のエントリ

更新時刻

  • 1かいめ 2007年, 5月4日, 6:40
  • 2かいめ 2007年, 5月16日, 2:30
  • 3かいめ 2007年, 6月30日, 4:36
  • 4かいめ 2007年, 7月4日, 2:40
  • 5かいめ 2007年, 7月5日, 0:25
  • 6かいめ 2007年, 7月5日, 23:5
  • 7かいめ 2007年, 7月8日, 1:33
  • 8かいめ 2007年, 7月14日, 2:50
  • 9かいめ 2007年, 11月18日, 23:22
  • 10かいめ 2007年, 11月23日, 4:57
  • 11かいめ 2008年, 1月29日, 22:59
  • 12かいめ 2008年, 2月20日, わせた
  • 13かいめ 2008年, 2月20日, 17:36
  • 14かいめ 2008年, 4月5日, 14:08
  • 15かいめ 2008年, 6月12日, 23:24
  • 16かいめ 2008年,11月14日,22:15
  • 17(?)かいめ 2009年,7月4日,23:55
  • 18 かいめ 2011, 4月2日, 21:35

tekezotekezo 2007/07/05 11:09 text-translator.el の一部分で typo があるようです。
s/defualt/default/g

khikerkhiker 2007/07/05 23:02 どうも, ありがとうございます.
直しておきました.
また, 見直していたらもう1つスペルミスと, 1このバグを発見したので,
それも一緒に直しておきました.

バグは, text-translator-translate-default を使ったとき,
*translated* バッファのモードラインに使用した翻訳形式が正しく表示されなかったというものです.

また何か気付いたことがあったら, 遠慮なく教えて下さると嬉しいです.

tekezotekezo 2007/07/06 11:37 対応ありがとうございます。

今のデフォルトだと text-translator-pre-string-replace-alist で改行とかを落としていますが、
これって minibuffer の為に翻訳対象文を一行に抑えるための処理なのでしょうか?
(Webサーバに投げるときは enc-str を指定しているので改行を落とす必要はないですよね)

Yahoo_jaen とかだと、region で指定した複数行の翻訳対象の結果が
一行にまとめられてしまって、ちょっと使い勝手が悪いなぁと感じてしまいましたので。

-----------------------------------
[翻訳対象文]
スペルミスと1つのバグ修正です.
スペルミスは以下のようなもの.
-----------------------------------

-----------------------------------
[デフォルトの結果]
It is a spelling error and one bug revision. The spelling error seems to be as follows.
-----------------------------------

-----------------------------------
(setq text-translator-pre-string-replace-alist nil) の場合の結果

It is a spelling error and one bug revision.
The spelling error seems to be as follows.
-----------------------------------

khikerkhiker 2007/07/06 23:17 どうも.

それは最初作成していたとき, Emacs からシェルを介して,
Ruby プログラムに投げるような仕様になってたときの名残だと思います.
# Ruby プログラムに投げるとき, シェルを介してたから, $ とか & とかをエスケープする必要があった.
それで, 改行を落としてたのは, そのとき色々試行錯誤していたものが
残ってしまっていたということだと思います.
ミニバッファは, あまりというかほとんど関係ないです.

Emacs 内で全部処理するようになった今となっては,
text-translator-pre-string-alist の存在価値自体があまり無いかもしれません.

今のものは, text-translator 側の変換がちょっとおせっかいすぎますね.
とりあえず, 新しいバージョンとして公開するには変更が小さすぎる気がしないでも無いので,
ブログに追記しておきます.
内容は, 次回更新のときに反映させます.
ありがとうございます.

# 次回かあ. ここらへんをどうにかできればいいなあ・・・
# Google だと強制的に改行を消してしまうので, もっと柔軟に.

tekezotekezo 2007/07/07 14:04 なるほど。 納得です。
そういえば以前は elisp + ruby でしたもんね。

RR 2007/07/07 17:38 HTTP_PROXYの対応ありがとうございました。
ただ、text-translator-proxy-portに文字列が入っており設定しないとつながらないようです。
また、autoloadですが今は非推奨だったと思います。
requireが最近では推奨されているので、なるべくならそちらを使ったほうがいいのかもしれません。

khikerkhiker 2007/07/08 07:49 どうも.

つながりませんでしたか. すいません.
学校で試したときに繋がったのでポート番号が文字列とされていることに気付きませんでした.
# Emacs のバージョンの違いかなんかかなあ. 当方は, 22.0.95.1 です.
この点は, plus さんが修正してくれたので, 最新版では直っています.
ご迷惑をおかけしました.

あと, autoload って非推奨なんですか.
たしかにあまり見ない気しますね.
リファレンスマニュアルの Tips and Conventions にも,
require するとは書いてありますが, autoload の文字列は出てきませんし.
でも, リファレンスマニュアルの他の部分を簡単に見てみたんですが, ちょっと正確なソースがよくわからないので,
後学のために教えてもらえませんでしょうか.

ブログの方には, とりあえず, require のバージョンも書いておきました.

RR 2007/07/12 23:10 ソースを探してみましたが見当たりませんでした。Lispマニュアルにも書いてあるので勘違いかもしれません。
ただ、autoloadの問題点としましては不具合が発見しづらいという点があります。
10数年前autoloadのLispパッケージがたくさんあったころ、どんどん.emacsにパッケージを増やしたのはいいのですが
Emacsを使っているうちにキー操作が意図しない動作を行うようになり、そのたびに再起動をする羽目になりました。

この原因は、autoloadで使うときに読み込みますが、そのとき既存の関数等を上書きしてしまうLispパッケージが原因でした。
つまり起動直後は正常、問題のautoloadで不具合が発生しても不具合に気がついたときにはどのautoloadでおかしくなったのかわからない。
という状況に陥って、問題のパッケージを探し出すのを苦労した記憶があります。
EmacsのLispパッケージは読み込む順番で挙動が変わるものも少なくなく、その後はautoloadを避けるようになりました。

いつかのNEWSで古いautoloadはやめてrequireを使おうというようなことが書いてあったように思い込んで発言したようです。
現在私の.emacs(ちなみに10000行を超えていた・・・)でもまだまだautoloadを使うパッケージは残っていますので
絶対autoloadはいやだということはないので、作者様の自由意志でお決めくださいませ。

あと、不具合報告です。
transient-mark-modeは、私は使っていません(範囲指定にしか使えなくなるのと解除に一手間かかる)。
そうなると範囲指定を認識してくれませんので、他のパッケージのようにマークと現在のカーソルの位置までを範囲としていただくよう望みます。

khikerkhiker 2007/07/14 03:05 どうも.

なるほど. 貴重な体験談をありがとうございます.
autoload の方が起動が速くなるので, そっちの方が良いかなと思って autoload を書いていました.
そういうことがあるのですか.
たしかに一度はまるとやっかいそうですね.
ちなみに自分は, require の方をよく使っています.
もう Emacs を速く起動することは, あきらめているし, 簡単に書けるんで(^^;)
とりあえず, text-translator の説明には, 両方記述しておきました.
# autoload 優先ですが, まあ, 既存の関数の上書きは無い(はずな)ので, 大丈夫でしょう.

読み込む順番で挙動が変わるもの〜にはいくつか出会ったことがあります.
一番まいったのは, icicles と skk ですねえ.
skk を先に読み込んでいると icicles が上手く動かないということに気付くのに時間がかかりました.


>あと、不具合報告です。
>transient-mark-modeは、私は使っていません(範囲指定にしか使えなくなるのと解除に一手間かかる)。
>そうなると範囲指定を認識してくれませんので、他のパッケージのようにマークと現在のカーソルの位置までを範囲としていただくよう望みます

不具合報告ありがとうございます.
なるほど. transient-mark-mode を t にしておかないと選択範囲が分かりづらいので,
ずっと t にしてました.
nil にしておくことになれると, 高速に範囲選択できそうですね.

範囲指定は, transient-mark-mode が t の場合のみに有効にするようになっていました.
これは, plus さん提供によるパッチで修正されました.
transient-mark-mode が nil の場合で動くはずです.
ご迷惑おかけしました.

fishnfins0fishnfins0 2008/11/08 15:16 www.freetranslation.comが動かないです。
' *translated*'バッファには生の翻訳後のhtmlが入っていますが、
'*translated*'バッファは空のままです。

khikerkhiker 2008/11/08 23:28 ご報告ありがとうございます.
ただ,リアルでちょっと締切が近いので少し対応が遅れます.#さんざん今までも放置しちゃってますが.
遅くとも来週中には確認して直します.

khikerkhiker 2008/11/14 22:40 freetranslationだけでなく,fresheyeも動かなくなっていたので,
両方修正してアップロードしておきました.
報告して下さり,誠にありがとうございました.m(_ _)m
また何か気付いたことがあったら,言って下さると嬉しいです.

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/khiker/20070503/emacs_text_translator