2016-04-03 45 views
1

Okul için büyük veri ataması üzerinde çalışıyorum ve kod çalışmam için kelimeleri bir metin dosyasından filtrelemem gerekiyor.Java filtre kelimeleri nadir rastlanmayan alanlarda bile dosya dışı çıktı

Elbette dosyayı okuyun ve replaceAll ("[^ a-zA-Z0-9]", "") ile ihtiyacım olmayan şeyleri filtreleyim;

Ancak bu bir sorun getirir. Ben boşluklar göre filtreleme ve bazı özel durumlar gibi olduğundan:

wobbewy!'--'Wobbewy,' 

alıyorum gibi kelimeler:

wobbewywobbewy 

gibi alanlarda kelimeleri filtrelemek ve ayrıca yapmadan bu özel durumları filtrelemek için yine de var mı If ifadeleri muazzam miktarda? (Birden fazla boşluk) benim

+1

Neden kullanmıyorsunuz ("[^ a-zA-Z0-9]", ""), yani! '-' bir boşluk ile değiştirilecek ve boşluk karakterine göre bölünecek. Alternatif olarak: Herhangi bir şeyi değiştirmeyin ve sözcükleri regex kullanarak, örneğin \ w + desenini kullanarak aratmayın. – kevcodez

+0

Tabii ki, sözcükleri ayırmak için boşluk kullanmayan dillerle uğraşırken, tüm bu sorun daha da kötüleşiyor. Bazı dillerde (Thai, IIRC?) Basitçe bir metin bloğunu sözcüklere ayırmak, bir sözlük ve yinelemeli bir geri izleme algoritması gerektirir. –

cevap

0

Bölünmüş "non kelime" karakter üzerinde girdi, böylece bölünmüş tüketir:

String[] woord = thisLine.trim().split("[^a-zA-Z0-9']+"); 

Bildirim tek kelimeyle olarak muamele "yok" gibi kelimeleri olanağı verecek bir tutmaya chars kesme işareti eklendi .

1

özel karakterler kaldırarak, bilgileriniz

xxv i gibi outpuit olsun Sonra

while ((thisLine = bufferedReader.readLine()) != null) { 
     String[] woord = thisLine.toString().trim().split("\\s+"); 
     for(int i=0; i<woord.length; i++){ 
      normalWord = woord[i].replaceAll("[^a-zA-Z]+", " "); 
      normalWord = normalWord.toLowerCase(); 

i düzeltme çalışması sonrasında olup bitenlerin

Örnek kod kelime sınırları hakkında kaybolur.

replaceAll("[^a-zA-Z0-9]", ""); - replaceAll("([^a-zA-Z0-9]|\s)+", " "); için değiştirin (özel karakterleri ve beyaz alanları tek bir boşlukla değiştirin).

+0

Bu OP'nin örneği için beş boşluk yaratacaktır. "[^ A-zA-Z0-9] +" 'ı tercih ederim ve sonra uzaya bölerim. – nyname00

+0

nyname00 @ cevabımı Bu örnek çalışmaz – slartidan

+0

güncellenerek hata veriyor =) olsa beni olabilirdi ama nasıl olur bir aşağıdaki senaryoda bu iş ?: süre ((thisLine = bufferedReader.readLine())! = null) { \t Dize [] woord = thisLine.toString(). trim() replaceAll ("([^ a-zA-Z0-9] | \\ s) +", ""); \t için (i woord.length Tvt