2010-09-05 29 views

Respuesta

11

Si usted necesita para encontrar la última palabra de una cadena, a continuación, hacer esto:

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; 

Después de esta declaración, $ 1 llevará a cabo la última palabra de la cadena. Puede necesitar expandir la clase de caracteres, [.!?], Agregando más puntuación.

en 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]; 

?> 
+0

¿hay alguna manera de hacerlo, así que solo uso una expresión regular como compactarla en una sola? Porque tengo una función que estoy usando y yo simplemente no puede obtener la expresión regular para trabajar se está recogiendo puntos y espacios en blanco y nada más – Sam

3

En general no se puede analizar correctamente el texto Inglés con expresiones regulares.

Lo mejor que puede hacer es buscar alguna puntuacion que por lo general termina una oración, pero por desgracia esto no es una garantía. Por ejemplo, el texto Mr. Bloggs está aquí. ¿Quieres hablar con él? contiene dos períodos que tienen diferentes significados. No hay forma de que una expresión regular distinga entre los dos usos del período.

me gustaría sugerir que en lugar nos fijamos en una biblioteca de análisis sintáctico del lenguaje natural. Por ejemplo, la Stanford Parser tiene ningún problema en absoluto analizar correctamente el texto de arriba en las dos frases:

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

Hay un montón de otras bibliotecas de PNL de libre disposición que se puede utilizar también, no estoy avalan que un producto en en particular, es solo un ejemplo para demostrar que es posible analizar texto en oraciones con una confiabilidad bastante alta. Sin embargo, tenga en cuenta que incluso una biblioteca de análisis de lenguaje natural aún cometerá un error ocasionalmente, es difícil analizar correctamente los lenguajes humanos.

+0

sí que iba a d antes de cada punto final, pero tienes razón que recogería up mr. que no quiero – Sam

+1

El cartel original no especificaba inglés. Algunos idiomas no ponen espacios entre las palabras, por lo que me pregunto si un programa podría elegir la última palabra correcta. –

+0

sí cierto, nunca pensé en eso supongo que no sería – Sam

Cuestiones relacionadas