2022-06-25に更新

𓃵☽𓃡☽✸✦✦Google translate の翻訳後の文字のならび𓃡✦✦✧{counter}✧✸

読了目安:21分

google translate の翻訳

google translate で HTML tag つきの文字列を日本語へ翻訳すると、翻訳結果は堂々と変です。
これはずっと改善されていません。

examples :

英語からロシア語へ翻訳

image
これはおかしくないと思う。

英語からフランス語へ翻訳

image
これもおかしくないと思う。

英語から台湾語へ翻訳

image
だめだ。

英語から日本語へ翻訳

image
だめ。

問題

これは、google translate が前処理として、翻訳前に対象の文字列のHTMLのタグをいったんタグをはずして、翻訳後にテキストにタグを元のように戻すときに、日本語のような文字を 2 バイトで表す場合について起こるのか ??

それとも翻訳後に語順が、

記事 関する わたしたちの webページ
Article -> about -> Our -> web page

から

わたしたちの webページ 関する 記事
Our -> web page -> about -> Article

に変わる言語だから、関する 記事 はタグの構造のなかでの位置の変化に対処できず、タグの外へはみ出ちゃうのだろうか。

<p><li><ul> Article about Our <strong> web page </strong> </ul> </li> </p>

<p> <li> <ul> <strong> webページ </strong> </ul> </li> </p> 記事 関する
( わたしたちの )

ということについて、これからしばらく考える。


正規表現で文字列の抽出

ここから、ひたすら正規表現のブルートフォースアタックがつづくだろう。
サントリー「ほろよい アイスティーサワー」をのみながら。
検証方法を探るための材料を吟味するエンドレスに思える探求なので冗長。


https://rubular.com/r/9NNxkMhYWcN5IO
image

https://rubular.com/r/LZOG1DfF4BB4y8

https://rubular.com/r/oYFr9NWAqBZ15c

https://rubular.com/r/Jzs18Sz6x0FVlg
image


なぜこんなことをしているのか、ほとんど一日やってみたが、まずどうやって HTML のタグを検知して、タグのなかのテキストを取り出すのか見たかったから、だった。

ところで、いろんなひとが、やはり同じようなグーグル翻訳でタグ付きの文章を翻訳すると問題あるよね?という質問をしている、現在まで。
それぞれに対応策が語り合われているようだった、スタックオーバーフローとかで探すといくつか見つかる。また、どうやったら、任意の文字列を自動的に翻訳させずにエスケープさせれる のか、その指定方法は?とか。
質問時期もばらばらで、ある。眺めて、深くは読まない。
たしかに、ここからここまで翻訳しない でほしいと google translate に指示できたらいいが。


一旦全部のタグを外して、またもとに戻すにはどういう方法があるのか?ということを考えるのに、正規表現でのアプローチをやってみた、というか、やってる。

やっているうちに、xpath ならば、そのままタグは選んではずせるし、つけれることを考え始める。正規表現で答えが出ないうちから。

xpath cheat sheet

正規表現だとえんえんとパズルゲームとしてやり続けてしまうが、xpath 、xml での操作だと専用のライブラリで画一的な方法でテキストの抽出やタグ付けができる。


diary

## 雑感 ( 重要ではない ) 行きがかりじょう、python でトライアンドエラーを書いている。 なんとなくこういうことには Ruby に便利なメソッドがあるように思う。Python だと少し固い。Nim だと Python と似てるがさらになんか固い印象が。メソッド名はそれぞれ言語で似た名前がついているが、少し違うとかってあって、でも基本的には perl 由来なので、 perl の正規表現とかけ離れてはいない。 ということを一日していた翌日、ポストに本が届いた。 Ruby プログラミング入門 2000 年に出版された Ruby についての本。Ruby バージョン 1.6.1 の頃に書かれたものらしい。本の中にそう書いてあった。 22 年まえということになる。 あまり Ruby に興味がなく、でも書きやすく考えられているなぁとは思っていて、でもやはりそれほどは興味ないと思っていた今日このごろで [_why](https://crieit.net/posts/why) のことを知って、なにがそんなに _why がこの言語に情熱をもたせたのか興味がでたので勇気をだして本を注文したのだった。 なにがそんなに勇気なんだというと、本が読めないからだ。 本が読めなというのは、ディスクレシアというが、[コンピュータのプログラム言語の本を日本語で読もうとすると、文字のサイズや、形やアキがなんかめちゃくちゃにしか見えなくなって、読めなくなることが多々あって、読めなくなると心理的圧迫がある](https://crieit.net/posts/pycall)という、そこに勇気が必要になる。 読みづらい本を見るたびに、これが、気にならないのか?という疎外感をもつが、届いた本をパラパラみると、古いので茶けていたが、とてもきれいな状態で、文字もちゃんと考えられていて見失わないデザインだ。いいわ、これ。入門だし、ここへきて 22 年さかのぼって Ruby 入門。 数学の人だからなのか正規表現に対してすこし踏み入れた内容があった。でももしかすると、時代的に perl が主流で、perl の正規表現は主要なトピックだからそれが背景なのかもしれない。

を読みつつ Python で 正規表現と xpath の作業。

HTML のなかでタグにはさまれたテキストを選ぶ ( 重要 )

xxxx = re.finditer(r'((\.|\d|\w|&|\=|[ \(\)\-;:,%#+…"“’‘”\'&\?\!\.])*(?!([^<]*>)))',str(lines))

対象にする文字列の内容にもよるが、含める記号 (-``;``:``,``%``#``+) など正規表現の条件の中に足していくことになる。

example:
テスト文字列

<p>We plan to add further features to our <a href="https://github.com/bellingcat/tiktok_hashtag_analysis">TikTok tool</a> over time. Anyone who would like to contribute to our tool and help perfect it is invited to do so. See the corresponding Github repository’s <a href="https://github.com/bellingcat/tiktok-hashtag-analysis/issues">issues</a> page for potential contribution ideas.</p>

regexp:

\b((\.|\d|\w|&|\=|[ \(\)\-;:,%#+…"“’‘”\'&\?\!\.])*(?!([^<]*>)))

https://rubular.com/r/AtoRK9t0pFeZaU

image

この例では、HTML のこまぎれの <p> ではさまれて </p> で閉じられた中に更にタグがある場合で、タグではさまれている内容を抽出する。

つまり、タグを除去した文章を作るためで、そうしてできた文章はタグの影響は受けずに翻訳される。

We plan to add further features to our Ticktok tool over time. Anyone who would like to contribute to our tool and help perfect it is invited to do so. See the corresponding Github repository’s issues page for potential contribution ideas.

ダグにはさまれた文字列がこのように抽出される。
これを google 翻訳すると

[ja] 時間の経過とともに、Ticktokツールにさらなる機能を追加する予定です。私たち のツールに貢献し、完璧にしたい人なら誰でも、そうするように招待されています。潜 在的な貢献アイデアについては、対応するGitHubリポジトリの問題ページを参照してく ださい

という文章になりました。そして、タグにはさまれていたものがどれだったのか、どういうタグにはさまれていたのかについてはわからなくなりました。

タグにはさまれた状態のまま google 翻訳すると

[ja] <p> <a href="https://github.com/bellingcat/tiktok_hashtag_analysis"> tiktokツール</a>にさらなる機能を追加する予定です。私たちのツールに貢献し、完璧にしたい人なら誰でも、そうするように招待されています。対応するgithubリポジトリの<a href="https://github.com/bellingcat/tiktok-hashtag-analys/issues">問題</a>潜在的 な貢献アイデアについては</p>を参照してください

このような文章が生成されました。あきらかに語順がずれています。

どちらかというとタグを除去したあとに翻訳すると自然な文章になりますね。
しかしそれでは、少し足りないということになります。
これをなんとかしたい、ということがスタートラインです。
ようやく、スタート。

2つのリンクが含まれていて、それぞれTikTok tool と issues いう文字列に埋め込まれています。
<a href="https://github.com/bellingcat/tiktok_hashtag_analysis>TikTok tool</a>
<a href="https://github.com/bellingcat/tiktok-hashtag-analys/issues">issues</a>

これは、参照されることを期待して埋め込まれていますから、抜け落ちてしまうと、文章全体で意味が受け取れなくなってしまいます。

まあ、もとの原文を読んでいたら、ここがずれたんだなとわかる程度に変な文章ですが、

例えば例にした文章の場合、

<p><a href="https://github.com/bellingcat/tiktok_hashtag_analysis"> tiktokツール</a>にさらなる機能を追加する予定です。私たちのツールに貢献し、完璧にしたい人なら誰でも、そうするように招待されています。潜在的 な貢献アイデアについては対応するgithubリポジトリの<a href="https://github.com/bellingcat/tiktok-hashtag-analys/issues">問題</a>を参照してください</p>

となれば、合格という基準で、ずれているということになります。

おしいところですけれども、なんとなく合ってるふうにごまかしたような文章につくりかえてしまうので、どっちかというと、ずれていると気づけない文章になっているときにまずいので、これではだめでしょう。

1 pass ( 1 回の一連。) では、翻訳された文章を、並びをチェックして、おかしなところを直すのはむずかしそうです。

  • まず、タグを外して翻訳されたものにあとからタグをつける、
  • タグを外して翻訳されたものと、タグ付きの状態で翻訳されたものを比較する、
    など方法は別にして必要になることがわかります。

    もうすこしずらして考えてみると、タグをつけないということもありかもしれないというアイデアが浮かびます。

    リンクが文章の中に埋まっている場合、それは文字スペースの節約というか、見た感じスッキリさせるためで、リンクの埋め込まれた文字列をクリックするとジャンプするということで、これは別にパラグラフの最後に参考注釈としてあってもいいかも?という自分基準が見えてきました。印刷物だとそうなっているものだし。参照や、引用文献などのような感じで。

というアイデアを実際に見てみると、

やってみた。:

image

image

文中に埋め込まれていたリンクをパラグラフの終わりに列挙する書式。link : となっている部分はもとにした記事には存在しない。

比較:
https://www.bellingcat.com/news/2022/06/17/meet-the-irregular-troops-backing-up-russias-army-in-the-donbas/

image
比較:
https://www.npr.org/2022/06/17/1105827493/julian-assange-extradition-explained


このようなパラグラフがあったとして、

<p>We plan to add further features to our <a href="https://github.com/bellingcat/tiktok_hashtag_analysis">TikTok tool</a> over time. Anyone who would like to contribute to our tool and help perfect it is invited to do so. See the corresponding Github repository’s <a href="https://github.com/bellingcat/tiktok-hashtag-analysis/issues">issues</a> page for potential contribution ideas.</p>

python の re ( 正規表現パッケージ ) だとするとパラグラフのテキストを lines にセットして、
image

このようにすると、埋め込みの url と テキスト ( TickTok tool / issues ) が取り出せるだろう。

check! :
https://rubular.com/r/vyONqT7bU7fzvG
https://rubular.com/r/c4DoPWfam3JiP2

正規表現なので、python 以外でも、どのプログラミング言語でも同じような式を書けば同じように取り出せる。


一気にやるのではなくステップを分けて 2 pass でやれば可能なはず、とできたつもりでアイデアを実践していくと 10 時間以上かかってようやくできた。

google の翻訳を使って google の翻訳サービス以上のクオリティーにする試み。

google の翻訳を使って google の翻訳サービス以上のクオリティーにする試み。 とは、google の翻訳能力を借りて、性能はかわりないのだけどちょっと良くする、ということを指します。

勝手な感想ですが、この翻訳の結果が意味のわからないものになるという問題は、何冊か英語から日本語へ翻訳していて思っていたんですが、翻訳結果は悪くないんですが最後にずれているということなのです。
これを google の怠惰と呼びます、仮にですよ。
怠惰とは、機械学習が足りないとか、そういう問題とは別で、もっと基本的に、人間ぽい怠惰で、最後に靴を合わせておこうかいったことの部分で、めんどくさいからやらないというとこで、そういったことと同じような怠惰さでほっておかれている部分、そこを調整するとクオリティーが上がるということです。具体的には本の校正みたいに、なん百回と語順のずれた部分を見つけて意味が通るように直すということせずに済みます、分量のある英語の本など翻訳する場合ね。その部分がクオリティーアップされます。翻訳の言葉の選び方の美しさのクオリティーではありません。

image

うまくいっているように見える。パラグラフの中でリンクが埋め込まれている。パラグラフの終わりにも、文中のリンクに対応したリンクを番号をふっておいている。

ここまでの試行錯誤の過程で、なぜズレが生じるのかについて見えてきた。

問題は、翻訳前と翻訳後で文章の中の語順が変わり、それがタグの入れ子構造の中で起こると、タグを抜き出して、新たにタグの中にタグを入れるという作業が必要 になる。
これを標準的な xml パーサーで簡単にやろうとするとできないのではないかと思う。
できたよ、とやってしまっているのが google translate で、これは冒頭で見たようにできていない。

新たにタグの中にタグを入れるというのは、この場合、タグの中にあるテキストの途中で任意の文字列を切り取って、別の場所に移動して、その場所にタグを新たに埋め込んで、テキストを流し込んで、タグを閉じて、ということをする。

Rf. https://www.w3resource.com/python-exercises/BeautifulSoup/python-beautifulsoup-exercise-30.php

xml パーサーで簡単にやろうとすると、閉じたタグの後ろにタグを append したり、タグの前に insert する機能はある。タグにはさまれたテキストの途中で、タグをつくる機能は用意されていないようだった。

Rf. https://www.geeksforgeeks.org/insert-tags-or-strings-immediately-before-and-after-specified-tags-using-beautifulsoup/

そうすると、タグの中のテキストの途中にタグは作れないということになる。タグの中にあるタグは移動できるが、それはタグのユニットごとの移動であって、それでは、テクストのこの部分から、ここまでをというようには簡単にはできない。ハノイの塔みたいな手順ではできるかも?


そしてまた一日がかりでバグをデバックして、もうわからないわ、と考えてるのか考えてないのか、指だけ動いて、思考は疲れきっているという熱い日中、新たに本が届いた。
大きいのでポストに入りませんといわれた、さっそく封を開けてみると、大きい。たぶんこんなサイズと思っていた大きさの 1,5 倍くらいはある。
おおきかったのか。
1999 年に出版された Ruby の本だ。どんなことが書かれているのか気になっていたので、見てみると、なにかを C 言語で説明している。なにか、UNIX のマニュアルってこんな風なのじゃないのかな?という感じの Ruby 言語仕様書といえそうなものだった。

Rf. https://next.rikunabi.com/journal/20180402_t21_iq/

延々となやまされているのは python の正規表現の書き方がよくわからないのと、暑いのと、ずいぶん時間が過ぎているという焦燥だった。


また日付がかわって、今日は雨。

固いと表現した python の正規表現、わかりにくいところは match object からの文字列の取りだし方についてよく調べないとマッチしてても抽出できていないなど、sub と string replace の対象とする文字列の違いなど。string replace を使うときには string find を使って対象文字列に置き換えたい文字列が含まれているかフラグをたてた上で使うのがいいのかもしれない。

2 pass の方式 ... 後述

テスト :

Extraditing Julian Assange would be a gift to secretive, oppressive regimes

Peter Oborne
https://www.theguardian.com/commentisfree/2022/may/20/extradite-julian-assange-investigative-journalism-wikileaks
image

image

2 pass というのはデジタル映像のエンコード方法のことで、
一気に最初から圧縮し始める方式の 1 pass エンコードと比較して、まず最初に全体の時間軸のに対して映像の画像の移り変わりを記録 1 pass 。それが完了してから、次に記録データで時間軸に対する変化量に合わせた圧縮 ( エンコード ) をする 2 pass で完了するタスクのことをいいます。約 2 倍の時間がかかります。

google translate で訳して終わり、というのが 1 pass とすると、それを前処理にして別の手段で仕上げをするということを 2 pass とします。

google translate で翻訳すると tag 付けられたテキストは、翻訳後に文の中ではポジションがずれました。ほぼだいたい、後方にずれます。
ですので、文章の主語にあたる部分が消えて、
そうした背景でを、移動しまた。主語
のような形に変形されています。
そういう箇所があれば、後ろから、それっぽいのを見つけて、消失したと思われる文中のポジションに置き換えて、原文を読んで確認して... という作業が必要になります。
これが 1 pass クオリティーです。

2 pass にするには、翻訳結果の文章については翻訳文を使います。なので、明らかにずれてしまう結果になる原因の文中のタグを予め全て取り除き翻訳してもらいます。 1 pass 。
そして、翻訳結果のテキストに対してタグを追加するという処理を 2 pass 目でします。

これをしようとすると、タグをあとからつけ直すので、タグを取り除く前にタグが文中のどこにあったか 覚えておく 必要があります。
しかし、文字列をカウントして記録していたとしても、翻訳後には、別の言語になって、語順も変わるために、記録していたポジションにタグを戻すわけにはいかなくなります。

どうすれば、変わってしまったテクストのなかに正しく任意の場所にタグを新たにつけられるでしょうか?


というところまで書いたところで、書き込めなくなった。

https://forest.watch.impress.co.jp/docs/news/1418927.html
どうやら cloudflare のネット障害があったらしい。
コンテンツデリバリーネットワークで支えられてる、一対多数のリフレクションでコンテンツリバリーネットワークが競合してるのを排他すると、落ちると全部ズンと沈む。
いろいろ沈んだみたい一時間位。

でしょうか?

というところから。

タグを新たにつけられる でしょうか?

どこにつけたいいのかわからない、でも言葉がわかっている人間なら、ここっていうのは 見て考えたら わかります。
それをだれでもわかるようにしたらいいわけですね。

新たに
覚えておく

と表現しました。覚えておいたことを、見て考えて、新たにその場所にはさみこんだらいいようにしたい。そうすると、自動的にできますね。

メモでも貼り付けてえおけるとほかの人でもできる。
メモだけだと、わからない場合もあるので、目印があるといいですね。
ココという場所に、蛍光ペンで塗ってしまうとか。塗った色だけ残って、言葉は変わっても、色がついてたら、その言葉がわからなくてもできますね。
そう都合がいい方法はあるかな ...
ありそう、ちょっと考えてみてすぐ思いつくのは、メモを残す方法。

機械翻訳のことを考えて、その仕組みを想像していくと、なんか、検索エンジンに似ている、というイメージがわきました。似てるかどうだか、全然知りませんけども、似てるような気がするというバイアスのあるイメージです。同じような仕組みだよな ( 思い込み ) 、どうやってるんだろう? inverted index てなに?と脱線していくと、検索エンジンの SEO とかのどうでもいいウザい情報をきり払っていきます。
なにが似ていると思ったのか、どこが?というイメージに近いところにだけ分け入っていきます。脱線です。
翻訳に必要なのは、言葉、センテンスに対しての別の言葉の対応を見つける、というか指し示すことですが、一対一にあるわけではなくて、いろいろある中からとりあえず絞りんでいくことをしている。全部の言葉を知っているならばいいんですが、なんとなくこの辺、という見当違いのものも含むものを、はいこのへんでは?ととってきたものを風呂敷を広げてせて見せて、それを見た人の、これじゃないけど、こっちかも?という反応によって学習されている、かな。それだと、本当はわかっていなくても、なんとなく正解に近そうな雰囲気はつくりだせる。
機械学習も検索エンジンもそのへん同じようなアプローチじゃないかな?というイメージ。

出力結果が入力とは変わってしまって、入力時の条件である解空間とはちがう、でもある程度同じ分量の、同じような位置にあるはずというものを 見つけやすく したい。

そういうことだよな、と

さらに脱線。

では、この記事ページを翻訳してみてください。

google translate で。

ここまで読むひとは、もううんざりしているかもしれない。関係のないことばかりダラダラ書いてるだけじゃないか、と。だいたいなんだよ、この記事のタイトルは?ふざけてるだけで意味ないんじゃないの?と。

でも、ここまで読んでたとしたら、それはかなり変わってると思うので、やってみてください。

これポチッとおすだけです。google translate するのは。
"google 翻訳"

やってみた気づいたことがあれば、なんとなくここまでのことと照らし合わせてみて、わかったことないですか? なにか、おかしい? とか、くどいとか。
説明はしてないけども。

重要でないことも書いていますけど、それも完全に無駄というつもりでもなく、ちょっとあとから説明したいんだけど、ながれで追っていくと、どうしたくて、どうやって?という道すじになっていると思うんです。
とくに、どうしたい?という部分だけがモチベーションで、その部分がどうでもいいことだと感じる場合は意味のないことで、切実な動機がなければ、わざわざやることてはないとかたづいてしまいますね。

やり方についてはいろいろなアプローチがありますが、( そう高くない ) 美意識で、ギリギリここは超えている、だめな方へという瀬戸際越えているところという部分が無視できないところで、それが無視されているということに対するアプローチで、やってみるというところにきているのだと思います。

Cloudflare がネット障害になっていろんなものが落ちた影響で、まわりまわって〘みんなの自動翻訳〙というものを知った。知ったけど現在つながりません。
https://twitter.com/minhonMT/status/1539168654947848193?t=JSzxxvJLz48YR2MUP7pwtA&s=19
気になります。

テスト :

CloudFlair: Bypassing Cloudflare using Internet-wide scan data

christophetd 18 January 2018
https://blog.christophetd.fr/bypassing-cloudflare-using-internet-wide-scan-data
image
image

Rf. https://graphemica.com/𓃁
Rf. https://unicode-table.com/en/
Rf. https://softwareengineering.stackexchange.com/questions/190409/a-unicode-sentinel-value-i-can-use

検索エンジン、inverted index をネット検索していると、アルゴリズム全般のことを扱った記事などが目につく。
見慣れないキーワードに、番兵 ( sentinel value ) というのがあり、番兵を調べると、ぱっと見たイメージで、あ、こういう感じだねと思いついた。

番兵についてはよく知らないけど、イメージと考えているものとがひっついたことは、キーワードに対してマーキングするということだった。
今、目印をつけたいものがテクストの中にある。その目印つけたいものは、このあと加工されて、見分けがつかなくなるわけだけど、目印の素材として役立つ機能的なものは、加工されても そこだけ変化しないで見分けがつくもの、もしくは、加工後の形状が予めわかっているもの、だ。目印くんは何もしなくてそこに消えずにいてくれたらいい。
番兵がどうだか知らないが、テクストにマーク付するということは、そのキーワードの前後を、何かではさむといい。

そこで、さっき、この記事を google translateで翻訳してみてほしいと書いた。

やってみたらわかったと思う。
やってみたけど、なんのことがわからなかったという人は、少しいじのわるいひっかけもあったからだと思う。

記事 と書いたが、翻訳後に記事を上から下までチェックする必要はないし、
また、日本語から英語に翻訳されるけど、英語をまったく読まなくてもいい。それは、必要がない。
躊躇した人は、上から下まで、ではなく、上だけ見てほしい。

はい、トライ アゲイン。
google translate

日本語から英語に翻訳されていくときに、変わらないところがあります。
つまり、変わらないということは、目印にできます。

こうなっているとこです。

𓃵☽𓃡☽✸✦✦Google translate の翻訳後の文字のならび𓃡✦✦✧{counter}✧✸

𓃵☽𓃡☽✸✦✦ から始まって、𓃡✦✦✧ 出てくる手前までを抜き出すということができるので、
文章が翻訳されても、変更された内容についてわからなくても目印になるということになります。

/𓃵☽𓃡☽✸✦{2}(.+?)𓃡✦{2}✧\d+✧✸/
https://rubular.com/r/njSea7ta3OM9yv

𓃵☽𓃡 などは unicode 文字で、文字ではあるけど翻訳時には無視されるようなので、翻訳完了後そのまま残されるか、消されてしまうかで、消されてしまうと使えないですが、1 つの例として選びました。
こういうことに使えそうなものとして unicode 文字があるわけですが、番兵 ( sentinel value ) として使われているようなので、ネット検索するとでてきます。

こういうことに使えるのかどうかはさておき、眺めるヒエログリフ
Egyptian hieroglyphs
https://en.m.wikipedia.org/wiki/Template:Unicode_chart_Egyptian_Hieroglyphs

ツイッターでシェア
みんなに共有、忘れないようにメモ

tomato

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント