2014-09-06 1 views
0

Учитывая следующую фразуЛучший способ разделить текст на предложения, избегая столкновения аббревиатуры

г-жа Мэри познакомилась с ее мужа г-н Дэйв в своей поездке в U.S.A. и было круто. Знаете ли вы, что Дейв работал в Microsoft? Хорошо. Он был даже частью разработчиков Internet Explorer.

Что такое лучший «псевдо-код» способ разделить его на предложения? Python или любой другой подобный язык также прекрасен из-за его псевдокодового сходства.

То, что я думал, чтобы заменить каждое вхождение " a-zA-Z." (обратите внимание, пространство), ".a-zA-Z" и ".a-zA-Z." к его эквивалент без точки, конечно, так, например

" a." 
" b." 
" c." 
" d." 
" e." 
" f." 
... 

и

".a." 
".b." 
".c." 
".d." 
".e." 
".f." 
... 

и

" ab." 
" ac." 
" ad." 
... 
" ba." 
" bc." 
" bd." 
... 

р hrase должны быть хорошо преобразованы в следующем

ж Мэри познакомилась с ее мужем г-н Дэйв в своей поездке в США, и это было круто. Знаете ли вы, что Дейв работал в Microsoft? Хорошо. Он был даже частью разработчиков Internet Explorer.

... или я где-то ошибаюсь, и у меня есть некорректная логика?

Для будущего то, что ваш вопрос комментариев, мне нужно знать, что это лучший способ, чтобы разделить пример текст в правильные фразы, избегая столкновения с аббревиатурами.

Это объясняется в псевдокоде, на языке Python или на других языках, подобных псевдокоду. Я хочу, чтобы он был агностиком языка, поэтому он может быть реализован кем угодно, независимо от языка, который они используют.

+0

Что бы вы посоветовали для «Я совершил поездку в U.S.A. Это было круто».? – usr2564301

+0

В конечном счете, обычный язык не может быть легко проанализирован. Подумайте о том, чтобы получить его B.Sc. Эд должен был учиться день и ночь. »Против« Нелегко было получить его B.Sc. Эд должен был учиться день и ночь. – usr2564301

+0

@AbuMusabBinZarqawi Точно; В первую очередь, запрос на псевдокод - это * сильный * индикатор, который слишком широк - у вас даже нет языка. Вы также не сделали никакой очевидной попытки, и ваш вопрос сводится к «Мне нужно знать, что лучше всего разбить текст примера на правильные предложения, избегая столкновений с акронимами». Не только слишком широкий; но, возможно, и в первую очередь на основе мнения. Но * вы уже очень хорошо это знаете *. –

ответ

0

Все акронимы в примере относятся к рисунку Uppercase . или Uppercase lowercase .; ни одно из другого - регулярное - появление полной остановки соответствует этой конкретной схеме.

Таким образом, простой регресс может быть использован для удаления всех остановок. После этого можно разделить на обычные знаки препинания .!?. В Javascript:

str2 = str.replace(/([A-Z][a-z]?)\./g, '$1'); 

или с использованием GREP аромат, который делает понять наиболее распространенные классы символов:

str2 = str.replace(/(\u\l?)\./g, '$1'); 

Это приводит непосредственно на выходе, как показано на рисунке.

Использование RegEx простое (и легко расширяемое!), Но тот же шаблон можно протестировать и на других языках.В C, вы можете скопировать входные данные на выход и тест только тогда, когда видит . характер:

int main (void) 
{ 
    char input[] = "Ms. Mary got to know her husband Mr. Dave in her trip to " 
     "U.S.A. and it was cool. Did you know Dave worked for Microsoft? Well " 
     "he did. He was even part of Internet Explorer devs."; 
    char output[256], *readptr, *writeptr; 

    printf ("in: %s\n", input); 

    readptr = input; 
    writeptr = output; 
    while (*readptr) 
    { 
     if (*readptr == '.') 
     { 
      if ((readptr > input && isupper(readptr[-1])) || 
       (readptr > input+1 && isupper(readptr[-2]) && islower(readptr[-1]))) 
      { 
       readptr++; 
       continue; 
      } 
     } 
     *writeptr = *readptr; 
     readptr++; 
     writeptr++; 
    } 

    *writeptr = 0; 
    printf ("out: %s\n", output); 

    return 0; 
} 

Эти решения удалить торможений из исходного текста. Если вы хотите их сохранить, вы можете заменить их заполнителем (например, символом, который обычно не встречается в исходном тексте) или сделать обратное: при расщеплении на предложениях, проверьте, полная остановка является допустимой точкой прерывания.


Запоздалая мысль: это делает работу на оригинальном образце предложения ... но это не на один в комментариях:

I made a trip to the U.S.A. It was cool.I liked it very much. 

, где вы получите выход

I made a trip to the USA It was cool.I liked it very much. 

Для этого требуется проверка более возможных сценариев:

  1. распространенные сокращения, такие как Ms. и Mr.: \u\l\.
  2. в предложении-акронимы; "США." затем нижний регистр: (\u\.)+ (?=\l), где полная остановка требует удаления;
  3. аббревиатуры конца предложения; "США." за которым следует прописная буква: (\u\.)+ (?=\u), где должна оставаться последняя полная остановка.
Смежные вопросы