2013-05-09 4 views
1

Я хочу проверить качество формирования предложения. В частности, я ищу, чтобы конечный пользователь вводил пробел после пунктуации. Я в порядке с библиотекой NLP или просто с помощью java-регулярного выражения.Формирование предложений: Пунктуационные проверки в java

Например:

  1. «Привет, меня зовут Том Круз мне нравятся фильмы»
  2. «Привет, меня зовут Том Круз мне нравится кино.»
  3. «Привет, мое имя Том Cruise.I как фильмы»

приговорить 1 совершенно, предложение 2 плохо, так как он имеет 1 пунктуацию без пробела после него, и предложение 3 является худшим, так как ни один из пунктуации не удался с пространством ,

Можете ли вы предложить подход к Java? Я пробовал API-интерфейс languagetool, но не работал.

ответ

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"); 
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.