Как Вы анализируете абзац текста в предложения? (perferrably в Ruby)

В моем коде есть две проблемы: во-первых, консольный журнал просто удалите его для сниппета. затем все работает нормально, вторая главная проблема, которую я забыл написать, это файл css (вопрос обновлен). Мой дизайнер установил мой флажок в

display none

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

opacity: 0; позиция: абсолютная;

надеюсь, что это будет работайте и для вас, ребята

22
задан henry74 14 May 2009 в 01:11
поделиться

12 ответов

Попробуйте найти оболочку Ruby вокруг Stanford Parser . В нем есть функция getSentencesFromString ().

13
ответ дан 29 November 2019 в 04:44
поделиться

Я не любитель Ruby, но мне лучше всего подойдет RegEx с разделением на

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

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

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

0
ответ дан 29 November 2019 в 04:44
поделиться

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

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

0
ответ дан 29 November 2019 в 04:44
поделиться

Очевидно, что paragraph.split ('.') не разрезает

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

0
ответ дан 29 November 2019 в 04:44
поделиться

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

Редактировать: Поиск прописных букв с помощью Ruby.

Другое редактирование:

Проверить предложение конечные знаки препинания, следующие за словами, которые не начинаются с заглавных букв.

1
ответ дан 29 November 2019 в 04:44
поделиться

Unfortunately I'm not a ruby guy but maybe an example in perl will get you headed in the right direction. Using a non matching look behind for the ending punctuation then some special cases in a not behind followed by any amount of space followed by look ahead for a capital letter. I'm sure this isn't perfect but I hope it points you in the right direction. Not sure how you would know if U.S.A. is actually at the end of the sentence...

#!/usr/bin/perl

$string = "Mr. Thompson is from the U.S.A. and is 75 years old. Dr. Bob is a dentist. This is a string that contains several sentances. For example this is one. Followed by another. Can it deal with a question?  It sure can!";

my @sentances = split(/(?:(?<=\.|\!|\?)(?<!Mr\.|Dr\.)(?<!U\.S\.A\.)\s+(?=[A-Z]))/, $string);

for (@sentances) {
    print $_."\n";
}
2
ответ дан 29 November 2019 в 04:44
поделиться

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

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

0
ответ дан 29 November 2019 в 04:44
поделиться

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

Edit: Я рекомендую синтаксический анализатор Stanford, если вы умеете использовать Java. У меня нет рекомендаций по использованию других языков, но мне очень интересно услышать, что еще есть с открытым исходным кодом.

4
ответ дан 29 November 2019 в 04:44
поделиться

Чтобы было понятно, простого решения этой проблемы нет. Это тема исследования НЛП, как показывает быстрый поиск в Google .

Тем не менее, похоже, что есть несколько проектов с открытым исходным кодом, имеющих дело с NLP, поддерживающим обнаружение предложений, я нашел следующий набор инструментов на основе Java:

openNLP

Дополнительный комментарий: проблема определения, где предложения начинаются и заканчиваются. также называется устранением неоднозначности границы предложения (SBD) в обработке естественного языка .

8
ответ дан 29 November 2019 в 04:44
поделиться

Взгляните на разделитель предложений Python в NLTK (Набор инструментов для естественного языка):

Токенизатор предложений пунктов

Он основан на следующей статье:

Поцелуй, Тибор и Странк, Янв (2006): Неконтролируемое определение границ многоязычных предложений . Компьютерная лингвистика 32: 485-525.

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

I ' Я немного протестировал этот инструмент неформально, и он, кажется, дает хорошие результаты для множества (человеческих) языков.

Перенос его на Ruby было бы нетривиально, но он может дать вам некоторые идеи.

5
ответ дан 29 November 2019 в 04:44
поделиться

СПАСИБО !

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

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

мои 2 цента

0
ответ дан 29 November 2019 в 04:44
поделиться

Похоже, этот рубиновый гем может помочь.

https://github.com/zencephalon/Tactful_Tokenizer

5
ответ дан 29 November 2019 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: