Регулярное выражение для поиска последнего слова в предложении - PullRequest
8 голосов
/ 06 сентября 2010

Как мне найти последнее слово в предложении с регулярным выражением?

Ответы [ 2 ]

11 голосов
/ 06 сентября 2010

Если вам нужно найти последнее слово в строке, то сделайте следующее:

m/
    (\w+)      (?# Match a word, store its value into pattern memory)

    [.!?]?     (?# Some strings might hold a sentence. If so, this)
               (?# component will match zero or one punctuation)
               (?# characters)

    \s*        (?# Match trailing whitespace using the * because there)
               (?# might not be any)

    $          (?# Anchor the match to the end of the string)
/x;

После этого оператора $ 1 будет содержать последнее слово в строке. Возможно, вам придется расширить класс символов, [.!?], Добавив больше знаков препинания.

в PHP:

<?php

$str = 'MiloCold is Neat';
$str_Pattern = '/[^ ]*$/';

preg_match($str_Pattern, $str, $results);

// Prints "Neat", but you can just assign it to a variable.
print $results[0];

?> 
3 голосов
/ 06 сентября 2010

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

Лучшее, что вы можете сделать, - это найти пунктуацию, которая обычно завершает предложение, но, к сожалению, это не гарантия. Например текст г-н. Блоггс здесь. Вы хотите поговорить с ним? содержит два периода, которые имеют разные значения. Регулярное выражение не может различить два использования периода.

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

Mr./NNP Bloggs/NNP is/VBZ here/RB <b>./.</b>
Do/VBP you/PRP want/VB to/TO talk/VB to/TO him/PRP <b>?/.</b>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...