Извлечение слов с помощью Perl - PullRequest
1 голос
/ 28 ноября 2011

Мне нравится извлекать слова из текста.Я написал простое регулярное выражение.

my $regex = qr[\W];
while(<DATA>){
    push  @words, split $regex;
}   

Я хотел бы изменить его, чтобы включить собственные имена.Собственные имена могут объединять несколько «слов».Например ..

@names = ('John Smith', 'Joe Smith');

Ответы [ 2 ]

2 голосов
/ 28 ноября 2011

Я не думаю, что есть окончательное решение. Регулярное выражение ограничено в сложном текстовом пространстве, таком как веб-страница или книга со многими аномалиями, например, как насчет названий книг? Посмотрите на использование 1) обработки на естественном языке или 2) индексного подхода, при котором вы идентифицируете два слова, начиная с заглавной буквы, разделенных на один пробел, и посмотрите, содержится ли одно из них в индексе известных имен или фамилий. удачи.

1 голос
/ 28 ноября 2011

Возможно:

!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
my @words;
while(<DATA>){
    push @words, $1 if m{([A-Z]\w*\s+[A-Z]\w*)};
}   
for my $name (@words) {
    print "$name\n";
}
print Dumper \@words;
__DATA__
John Smith I am
He is Joe Smith 
John Doe
Sam
Sally
Sally Girl
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...