1

文章形成の質をチェックしたい。具体的には、エンドユーザーが句読点の後にスペースを入力するかどうかを確認しています。NLP ライブラリや単純な Java 正規表現ソリューションでも問題ありません。

例えば:

  1. 「こんにちは、トム・クルーズです。映画が好きです」
  2. 「こんにちは、トム・クルーズです。映画が好きです」
  3. 「こんにちは、トム・クルーズです。映画が好きです」

センテンス 1 は完璧ですが、センテンス 2 は句読点が 1 つあり、その後にスペースがありません。センテンス 3 は、どの句読点にもスペースが続いていないため最悪です。

これに対するJavaのアプローチを提案してもらえますか? languagetool API を試しましたが、うまくいきませんでした。

4

2 に答える 2

1

Patterns と Unicode のカテゴリを試してみませんか?

例えば:

Pattern pattern = Pattern.compile("\\p{P} ");
        Matcher matcher = pattern.matcher("Hi, my name is Tom Cruise. I like movies");
        while (matcher.find()) {
            System.out.println(matcher.group());
        }

ここでのパターンは、句読点の後にスペースが続くものを検索します。出力は次のようになります。

, 
. 

(コンマとドットの後のスペースに注意してください)

おそらく、どの句読点文字の後にスペースが続くのに適しているかを指定することで、パターンを絞り込むことができます。

最後に、その逆 (句読点の後に空白が続かない) をチェックするには、次のようにします。

Pattern otherPattern = Pattern.compile("\\p{P}\\S");
于 2013-05-09T10:05:44.400 に答える
1
Pattern pattern = Pattern.compile("\\p{P}\\S");

String[] tests = new String[] {
    "Hi, my name is Tom Cruise. I like movies",
    "Hi,my name is Tom Cruise. I like movies",
    "Hi,my name is Tom Cruise.I like movies"
};

int[] results = new int[] { 0, 0, 0 };

for (int i = 0; i < tests.length; i++) {
    Matcher matcher = pattern.matcher(tests[i]);
    while(matcher.find()) {
        results[i] += 1;
    }
    if (results[i] == 0) {
        System.out.println("Sentence " + (i + 1) + " is perfect");
    } else if (results[i] > 1 && results[i] < 3) {
        System.out.println("Sentence " + (i + 1) + " is good");
    } else {
        System.out.println("Sentence " + (i + 1) + " is bad");
    }
}
// now you know how many violations there were on every line.
// do whatever you want with them.
于 2013-05-09T10:12:09.190 に答える