2010-09-05 40 views
8

nasıl normal bir ifade ile bir cümlede son sözü bulabilirsiniz cümlede geçen kelime bulmak için? Bir dizesinde son sözü bulmanız gerekiyorsaNormal ifade

+0

Yazılı metin hangi dilde? İngilizce? –

cevap

11

, o zaman bu yapın: bu tespitinin ardından

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 dizesinde son sözü tutacaktır. Daha fazla noktalama ekleyerek karakter sınıfını [.!?] Genişletmeniz gerekebilir. PHP'de

: doğru düzenli ifadelerle İngilizce metin ayrıştırmak olamaz Genelde

<?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

bunu yapmanın bir yolu var, öyle ki sadece bir tanesine benzeyen düzenli bir ifade kullanıyorum? i kullanıyorum bir işlevi vardır ve neden kendimi alamıyorum – Sam

3

.

yapabileceğiniz en iyi genellikle bir cümle sonlandırır ama ne yazık ki bu bir garanti değildir, bazı noktalama için bakmaktır. Örneğin, Sayın Bloggs metni burada. Onunla konuşmak ister misin? farklı anlamlara sahip iki dönem içerir. Dönemin iki kullanımı arasında ayrım yapmak için düzenli bir ifade yolu yoktur.

Sana bir doğal dil ayrıştırma kütüphanede bakmak yerine öneririm. Örneğin Stanford Parser hiç doğru iki cümleye yukarıdaki metni ayrıştırma hiçbir sorun vardır:

, ben onaylamadan değilim siz de kullanabilirsiniz diğer serbestçe kullanılabilir NLP kütüphanelerinin çok var
 
Mr./NNP Bloggs/NNP is/VBZ here/RB ./. 
Do/VBP you/PRP want/VB to/TO talk/VB to/TO him/PRP ?/. 

bu bir ürün içinde özellikle - sadece metni oldukça yüksek güvenilirlikle parçalara ayırmanın mümkün olduğunu gösteren bir örnektir. Ancak, doğal bir dil ayrıştırma kütüphanesinin bile bazen bir hata yapmasına rağmen, insan dillerini doğru şekilde ayırmanın zor olduğunu unutmayın.

+0

evet ben her tam durmadan önceki d bunu gidiyordu o Nokta ve beyaz boşluk ve başka bir şey toplayıp çalışmaya düzenli ifade almak ama bunu alacağını haklısın yukarı mr. Ben istemiyorum – Sam

+1

Orijinal poster İngilizce belirtmedi. Bazı diller kelimeler arasında boşluk koymuyor, bu yüzden bir programın son sözü iyi bir şekilde seçip seçemeyeceğini merak ediyorum. –

+0

evet doğru hiç düşünmedim ki, – Sam