6

Java APIを使用して特定の文の感嘆符を作成したいですか?

例:驚くべきこと==驚くべきことではありませんか?
例:寒い==寒くない!

文を提供することを条件に、感嘆符を生成するのに役立つベンダーやツールはありますか(つまり、上記の例の左側)。注:文章はユーザーによって提供され、正しい文章を取得できるはずです。

これを他のカテゴリでタグ付けする必要があるかどうかはわかりません

編集1

さらにいくつかの例、私はこれをできるだけ一般的にしたいと思います

例:彼らは遅れています==彼らは遅れていません!
例:彼は疲れているように見えます==彼は疲れているように見えませんか!
例:あの子は汚い==あの子は汚くない!
例:暑い==暑くない!

4

6 に答える 6

8

これをどの程度「スマート」かつ「洗練」にしたいかに応じて、これは非常に難しい問題または非常に簡単な問題のいずれかになります。これは非常に馬鹿げた単純な正規表現ソリューションです:

    String[] sentences = {
        "It's surprising",
        "It's cold",
        "It's $*($&%!",
        "That is a hot coffee indeed..."
    };
    for (String sentence : sentences) {
        System.out.println(
            sentence.replaceAll("It's (.+)", "Isn't it $1!")
        );
    }

これは(ideone.comで見られるように)印刷します:

意外じゃないですか!
寒くないですか!
$ *($&%!!
それは確かにホットコーヒーです...
于 2010-06-23T11:39:33.720 に答える
3

単純な正規表現の構造では、それほど遠くまでは行かないと思います。問題は、明らかに自然言語ドメインで操作しているため、考慮しなければならない可能性が非常に多いことです。ソリューションはどの程度一般的である必要がありますか?

Java APIでこのようなことが可能だとおっしゃっていましたが、Prologを使用することはオプションでしょうか?SWI-PrologにはJavaインターフェース(JPL)があり、あなたが説明している問題はPrologではるかにうまく解決されるでしょう。実際、これはPrologが最も得意とする種類の問題であり、学界で使用されています。SWI-Prologには、自然言語処理用のパッケージも含まれています(http://www.swi-prolog.org/pldoc/package/nlp.html)。これは、問題をあなたのものとして処理するために私が知っている最良の方法です。

もちろん、この機能があなたの製品/プロジェクトにとってどれほど重要かはわかりません。Prologを使用することはおそらくオプションではないので、他のオプションは、動詞/名詞などを抽出して対応する「文モデル」を作成するパーサーを作成することです(別名オブジェクトのグループ)。次に、このセンテンスモデルを、拡張可能な方法で設計されたいくつかのルールに基づいた別のセンテンスモデルに変換できます。これにより、新しいケースがポップアップしたときに(そして、そのような広いドメインで)、新しい「ルール」をに追加できます。あなたの変容。

これは確かに自明ではない解決策ですが、私は自明な解決策がどのように見えるか想像できません。

于 2010-07-30T12:53:34.137 に答える
2

この質問は感嘆についてではありません。'!'を追加するだけです すべての入力例に加えて、有効な感嘆文を取得します。

あなたはこれらのような文法変換の後です。

LingPipeには、特に学習システムを開発していて、「 speachの一部」(例のように件名や動詞句など)を認識する必要がある場合に使用できる興味深いもの(java)がいくつかあるようです。

于 2010-08-04T14:59:12.103 に答える
1

これは、正規表現のみを使用した私の見解であり、詳細な言語分析はありません。簡単にだますことができますが、ほとんどの例を処理します。

s.replace("(.+?)('re| are) (.+)", "Aren't $1 $3!")
.replace("(.+?)('s| is) (.+)", "Isn't $1 $3!")
.replace("(I|You|We|They) (.+)", "Don't $1 $2!")
.replace("(He|She|It) (\\w+)s (.*)", "Doesn't $1 $2 $3!")
// correct case
.replace(" You", " you")
.replace(" He", " he")
.replace(" She", " she")
.replace(" It", " it")
.replace(" We", " we")
.replace(" They", " they"); 
于 2010-08-05T20:13:57.827 に答える
1

Natural Language ToolKitを見てから、コードで使用する英語のサブセットと、必要な感嘆翻訳のタイプのより明確な定義に質問を絞り込みます。

于 2010-07-30T20:55:43.067 に答える
-2

これをどれだけ洗練させたいかはわかりませんが、「それは何でも」のような表現を「それは何でもない!」に変更したいだけなら、これは非常に簡単です。

String text = "It's cold";
String result = "Isn't it " + text.substring(5) + "!";

(正規表現を使用したpolygenelubricantのソリューションよりも単純です)。

于 2010-06-23T11:41:28.930 に答える