2014-07-09 26 views
11

Tüm nltk yöntemlerini kullanmayı denedim, ancak bazı kelimelerle garip sonuçlar veriyor.Python'da en iyi kaynak yöntemi nedir?

Örnekler

O bunu yapmaması gereken kelimelerin sık kesilen uç:

  • kaniş => poodl
  • makale ür

ya da çok kök vermez iyi:

  • easi ly ve kolay oldukça

Eğer python diğer kaynaklanan kütüphanelerini biliyor musunuz saplı, veya iyi bir sözlük değil,

  • yapraklar, büyüdükçe aynı kelimede saplı değil mi?

    Eğer

  • +1

    olup. Daha fazla bilgi için [buradan] (http: //en.wikipedia) adresini kontrol edin.ort/wiki/Stemming) – eliasah

    +0

    btw NLTK, insan dili verileriyle çalışacak Python programları oluşturmak için en iyi platformdur. – eliasah

    cevap

    -2

    1,0 here kaynaklanan denediniz ederiz?

    +0

    Farklı algoritmalar kullandıkları görülüyor. Denerim, teşekkürler! – PeYoTlL

    +0

    Köklemenin Python'un gerçek bir uygulaması olduğunu ve PyPi'de bulunan bir c kütüphanesinin etrafındaki sarıcı olan PyStemmer kadar hızlı olmayacağını unutmayın. – Spaceghost

    50

    Elde ettiğiniz sonuçlar (genellikle) İngilizce bir stemmer bekleniyor. “Bütün nltk yöntemlerini” denediğini söylüyorsun ama örneklerini denediğimde, bu durum böyle görünmüyor. İşte

    PorterStemmer

    import nltk 
    ps = nltk.stemmer.PorterStemmer() 
    ps.stem('grows') 
    'grow' 
    ps.stem('leaves') 
    'leav' 
    ps.stem('fairly') 
    'fairli' 
    

    kullanarak bazı örneklerdir sonuçlarıdır bunlar, ne istediğini orijinal kelimenin sürümlerini saplı bile hangi 'leav' ve 'fairli' 'büyümek'.

    Kartopu dallayıcısına geçersek, dili bir parametre olarak belirtmeliyiz.

    import nltk 
    sno = nltk.stem.SnowballStemmer('english') 
    sno.stem('grows') 
    'grow' 
    sno.stem('leaves') 
    'leav' 
    sno.stem('fairly') 
    'fair' 
    

    sonuç 'oldukça' 'adil' olarak saplı olan 'büyür' ve 'yaprakları' ama için daha önce olduğu gibi her iki durumda da Dolayısıyla

    (ve ikiden fazla sözcük köklerini nltk mevcut vardır) , söylediğin kelimeler aslında değil. LancasterStemmer, giriş olarak 'kolay' veya 'kolay' sağlandığında 'kolay' dönecektir.

    Belki de gerçekten bir parçalayıcı mı istiyorsunuz? Bu 'makale' ve 'kaniş' değişmezdi. Burada tartışılan edilmiştir

    import nltk 
    lemma = nltk..wordnet.WordNetLemmatizer() 
    lemma.lemmatize('article') 
    'article' 
    lemma..lemmatize('leaves') 
    'leaf' 
    
    +9

    Bu, seçilen cevap olmalıdır. – gobrewers14

    +1

    Fark b/w lemmantizer ve stemmer: https://stackoverflow.com/questions/1787110/what-is-the-true-difference-between-lemmatization-vs-stemming –

    4

    Bütün bu köklerini dolayısıyla böyle

    olarak beklenmeyen sonuçlar hep üretebilir, algoritmik sözcük kökü ayırıcı olan
    In [3]: from nltk.stem.porter import * 
    
    In [4]: stemmer = PorterStemmer() 
    
    In [5]: stemmer.stem('identified') 
    Out[5]: u'identifi' 
    
    In [6]: stemmer.stem('nonsensical') 
    Out[6]: u'nonsens' 
    

    doğru böyle bir Hunspell olarak bir sözlük tabanlı stemmer ihtiyaç kök sözcükleri almak için Stemmer.Here, aşağıdaki link numaralı telefonun bir python uygulamasıdır. Örnek kodu stemming`, sap, bir baz ya da kök form, genel olarak bir yazılı sözcük formuna çekimli (ya da bazen türetilmiş) kelimeler azaltmak için bir işlemdir `çünkü bu sonuçlar garip değildir burada

    >>> import hunspell 
    >>> hobj = hunspell.HunSpell('/usr/share/myspell/en_US.dic', '/usr/share/myspell/en_US.aff') 
    >>> hobj.spell('spookie') 
    False 
    >>> hobj.suggest('spookie') 
    ['spookier', 'spookiness', 'spooky', 'spook', 'spoonbill'] 
    >>> hobj.spell('spooky') 
    True 
    >>> hobj.analyze('linked') 
    [' st:link fl:D'] 
    >>> hobj.stem('linked') 
    ['link']