質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

Q&A

解決済

1回答

944閲覧

GASでLanguageApp.translateを使い入力された日本語、英語をそれぞれ識別して適した翻訳を行いたい!!!

takotaiki

総合スコア1

LINE Messaging API

LINE Messaging APIは、メッセージの送信・返信ができるAPIです。Web APIを経由しアプリケーションサーバとLINEのAPIでやり取りが可能。複数のメッセージタイプや分かりやすいAPIリファレンスを持ち、グループチャットにも対応しています。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

0グッド

0クリップ

投稿2020/11/05 09:13

編集2020/11/07 07:00

前提・実現したいこと

テキストを英語は日本語に、日本語は英語に翻訳すること。
元はline botを作成していて他の機能も取り付けていたのですが、翻訳の機能が思うように動いてくれないのでその部分を切り取らせていただきました。

発生している問題・エラーメッセージ

概ねその機能は達成できていると思っていたのですが、日本語→英語に翻訳するときに翻訳する文章に()や1+1=などの計算式が入ると翻訳されずに、元の文章がログに出力されてしまいます。

以下のように動くのが理想

日本語 →func transrationで判別 →func transtation2起動 →英語をログ出力

現状

日本語※()や計算式などを含む文 →func transrationで振り分けられない →func transrationでそのまま翻訳 →原文でログを出力

該当のソースコード

GoogleAppScript

1var text = "文の中に()があると翻訳してくれないんじゃぁ…" 2 3function translation() { 4 var translationJa = LanguageApp.translate( text , "" , "ja" ); 5 if ( text.match(translationJa)) { 6 translation2(); 7 } 8 else { 9 Logger.log(translationJa); 10 } 11} 12 13function translation2() { 14 var translationEn = LanguageApp.translate( text , "" , "en" ); 15 Logger.log(translationEn); 16} 17 18 19 20出力されるログは「文の中に()があると翻訳してくれないんじゃぁ…」

試したこと

いろいろ試行錯誤した結果がこのソースになってたりしますが、なにぶんノンプログラマーと名乗るのもおこがましい程プログラムを触ったことがないので見苦しい点あるかと思います。
うまくいかなかったのは、日本語と英語の処理を逆にしてみたり、です…。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

draq

2020/11/05 11:26

ソースをそのままコピペして実行すると、ログには「If there is (), it won't translate ...」と出力されました。本当にこのソースコードで再現しますか?
takotaiki

2020/11/07 06:58

申し訳ないです。()などの正規表現が文末または文頭にある場合のみ正しく翻訳されるようです。再現されるコードに修正させていただきました。ご指摘ありがとうございます。
guest

回答1

0

ベストアンサー

おそらく、起きていることはこうです。

match正規表現によるマッチを行なうため、正規表現のメタ文字(特殊な意味を課せられた記号)である+()が含まれていると、単純な文字列比較とは異なる結果になる。

たとえば、質問者が言及している1+1は、正規表現では+が「直前のパターンの1回以上の繰り返し」であるため、「11」や「111」、「1111」……などに一致します。しかし、「1+1」とは一致しません。

なぜmatchを使っているのかはわかりませんが、ここでは「日本語変換した結果と元の文字列が一致するか」を調べているだけなので、単純な文字列比較を行なえばいいのですから、

Diff

1- if (text.match(translationJa)) { 2+ if (text === translationJa) {

のように===で比較する形に修正してください。

投稿2020/11/05 11:36

編集2020/11/05 12:02
Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takotaiki

2020/11/07 08:07

解決しました!ありがとうございます。正規表現と文字列についても勉強しなければいけないなと感じました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問