Как вы разбираете абзац текста в предложения? (желательно в рубине) - PullRequest
22 голосов
/ 14 мая 2009

Как вы берете абзац или большой объем текста и разбиваете его на предложения (желательно с использованием Ruby) с учетом таких случаев, как Mr. and Dr. и U.S.A? (Предполагая, что вы просто помещаете предложения в массив массивов)

UPDATE: Одно возможное решение, о котором я подумал, заключается в использовании тега частей речи (POST) и классификатора для определения конца предложения:

Получив данные от мистера Джонса, он почувствовал теплое солнце на его лице, когда он вышел на балкон своего летнего дома в Италии. Он был счастлив быть живым.

КЛАССИФИКАТОРЫ Г-н / ЧЕЛОВЕК Джонс / ЧЕЛОВЕК чувствовал / O / O тепло / O солнце / O on / O его / O лицо / O как / O он / O вышел / O / O на / O / O балкон / O из / O его / O лето / O дома / O в / O Италия / LOCATION ./O Он / O был / O счастлив / O to / O быть / O жив / O ./O

POST Г-н / NNP Джонс / NNP чувствовал / VBD / DT тепло / JJ солнце / NN / IN / его PRP $ лицо / NN как / IN он / PRP вышел / VBD / RP на / IN / балкон DT / NN / IN его / PRP $ лето / NN home / NN in / IN Италия ./NNP Он / PRP был / VBD счастлив / JJ to / TO be / VB жив. / IN

Можем ли мы предположить, что, поскольку Италия является местом, период является действительным концом предложения? С окончанием на "мистер" не было бы других частей речи, можем ли мы предположить, что это недопустимый период окончания предложения? Это лучший ответ на мой вопрос?

Мысли

Ответы [ 15 ]

0 голосов
/ 30 июля 2009

СПАСИБО !

Мне очень понравилось это обсуждение, поэтому я заинтересовался парсером. Я попробовал это, и я записал некоторые заметки о том, как заставить все работать с Ruby и / или Rails!

Попытка использовать регулярное выражение была кошмаром ..

мои 2 цента

0 голосов
/ 14 мая 2009

Я думаю, что это не всегда разрешимо, но вы можете разделить на основе "." (Точка, за которой следует пробел), и проверить, что слово перед точкой не входит в список слов, таких как Mr, Dr, и т.д.

Но, конечно, в вашем списке могут отсутствовать некоторые слова, и в этом случае вы получите плохие результаты.

0 голосов
/ 14 мая 2009

Ну, очевидно, paragraph.split('.') не будет сокращать

#split примет регулярное выражение в качестве ответа, поэтому вы можете попробовать использовать просмотр с нулевой шириной, чтобы найти слово, начинающееся с заглавной буквы. Конечно, это разделит правильные существительные, поэтому вам, возможно, придется прибегнуть к регулярному выражению, подобному этому /(Mr\.|Mrs\.|U\.S\.A ...), которое будет ужасно уродливым, если вы не построите регулярное выражение программно.

0 голосов
/ 14 мая 2009

Разбивка по периоду, за которым следуют пробел и заглавная буква, для названий вроде «Мистер Браун» не сработает.

Точки усложняют ситуацию, но легко разобраться с восклицательными знаками и вопросительными знаками. Тем не менее, есть случаи, которые бы не помогли. то есть фирменное наименование Yahoo!

0 голосов
/ 14 мая 2009

Я не Ruby парень, но RegEx, который разделен на

 ^(Mr|Mrs|Ms|Mme|Sta|Sr|Sra|Dr|U\.S\.A)[\.\!\?\"] [A-Z]

будет моей лучшей ставкой, как только вы получите параграф (разделенный на \ r \ n) Это предполагает, что ваши предложения правильно учтены.

Очевидно, это довольно уродливый RegEx. А как насчет двух пробелов между предложениями

...