Gerçek kelime üretir dallanma algoritması

3 Cevap php

Ben metin paragrafı alıp ondan "etiketleri" listesini ayıklamak gerekir. Bu çoğu oldukça yalındır. Ancak şimdi çoğaltmaları önlemek için çıkan kelime listesi kaynaklanan bazı yardıma ihtiyacım var. Örnek: Topluluk / Topluluklar

(Ben arada PHP yazıyorum) Porter Stemmer algoritmasının uygulanması kullandım:

http://tartarus.org/~martin/PorterStemmer/php.txt

Bu bir noktaya kadar çalışır, ama "gerçek" kelimeleri dönmez. Yukarıdaki örnekte "commun" için kaynaklandığı.

(Başka bir yığın taşması parçacığı içinde önerilen) "Kartopu" denedim.

http://snowball.tartarus.org/demo.php

Benim örnekte (toplum / topluluklar) için, Kartopu "communiti" kaynaklanıyor.

Question

Bu yapacak başka kaynaklanan algoritmalar var mı? Başkasının bu sorunu çözmüştür?

My current thinking is that I could use a stemming algorithm to avoid duplicates and then pick the shortest word I encounter to be the actual word to display.

3 Cevap

Burada temel sorun kaynaklanan algoritmalar on a phonetic basis tamamen onlar ile çalışıyoruz dil hiçbir gerçek anlayışı ile dilin yazım kurallarına göre faaliyet olmasıdır. Gerçek kelime üretmek için, muhtemelen geri gerçek kelimeleri kaynaklanıyor dönüştürmek için arama fonksiyonu bazı formu ile Stemmer çıkışını birleştirmek gerekir. Ben temelde Bunu yapmak için iki potansiyel yollarını görebilirsiniz:

  1. Bulun ya da gerçek bir kelimeye her olası kök haritalar geri büyük bir sözlük oluşturmak. (Örneğin, communiti -> topluluk)
  2. Bu kök ve en benzer olduğunu belirlemek için girişimleri düşürülmüştür kelime listesine her kök karşılaştıran bir işlev oluşturun. (Örneğin, "topluluk" ve "toplum" daha benzer seçenek olarak kabul edilecek böyle bir şekilde "topluluklar" karşı "communiti" karşılaştırarak)

Şahsen, ben yapardım yolu onu ve sonra en yaygın sözcük olmalıdır biri olduğunu varsayarak kaynaklandı ne ile birlikte incelendiğinde her kelimeyi kaydederek özel bir sözlük veri tabanı oluşturulması, 1. dinamik bir formu olacağını düşünüyorum kullanılır. Bir sözlük tabanlı yaklaşım, genel olarak daha doğru olacak ve stemmer giriş dayalı bu bina sonuçlar verecektir - (> toplulukları. Kaynak metnin bedenim kullanıyorsa, örneğin, "topluluklar" daha sık "toplum" dan, sonra communiti map) Birincil dezavantajı genellikle bu gün bir sorun değildir gerekli boşluk, varlık ile, metinler için özelleştirilmiş.

Eğer doğru anlamak, o zaman ne gerek bir stemmer ama lemmatizer değildir. Lemmatizer bir vb -ies, -ed gibi uçları, hakkında bilgi ile alet ve written, vb Lemmatizer kendi lemmasının için giriş wordform eşler gibi olağanüstü wordforms olduğunu , "gerçek" bir kelime olarak garanti edilmektedir.

There are many lemmatizers for English, I've only used morpha though. Morpha is just a big lex-file which you can compile into an executable. Usage example:

$ cat test.txt 
Community
Communities
$ cat test.txt | ./morpha -uc
Community
Community

Sen http://www.informatics.sussex.ac.uk/research/groups/nlp/carroll/morph.html adlı morfin alabilirsiniz

Hey çok geç belki eğer ben bilmiyorum, ama gerçek kelime üretir senaryoyu kaynaklanan tek bir PHP vardır: http://phpmorphy.sourceforge.net/ - onu bulmak için yaş götürdü. Diğer tüm köklerini derlenmiş olması ve hatta bundan sonra sadece sapları değil lemmaları (yani topluluk = communiti) üretir Porter algoritmasına göre çalışır. PhpMorphy biri gayet iyi çalışıyor, yüklemek ve başlatmak kolay, ve İngilizce, Rusça, Almanca, Ukraynaca ve Estonyalı sözlükler vardır. Aynı zamanda diğer sözlükler derlemek için kullanabileceğiniz bir komut dosyası ile birlikte geliyor. Belgeler Rusça olduğunu, ancak Google translate ve kolay olmalıdır aracılığıyla koydu.