2013-05-09 98 views
1

我想檢查句子形成的質量。具體而言,我正在查看最終用戶是否在標點符號後鍵入空格。 我也可以使用NLP庫或簡單的java正則表達式解決方案。構成句子:在java中標點符號檢查

例如:

  1. 「嗨,我的名字是湯姆·克魯斯我喜歡電影」
  2. 「嗨,我的名字是湯姆·克魯斯我喜歡的電影。」
  3. 「嗨,我的名字湯姆Cruise.I像電影」

句子1是完美的,2句是壞的,因爲它有1個標點符號不加上一個空格和第3句是最糟糕的,因爲沒有一個標點符號都成功,但有一個空間。

你可以請建議一個java的方法呢? 我嘗試了languagetool API,但沒有奏效。

回答

1

爲什麼不嘗試模式和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"); 
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.