ahmetaa / zemberek-nlp

NLP tools for Turkish.
Other
1.14k stars 208 forks source link

sayı ayracı problemi #246

Closed alihaydargol closed 4 years ago

alihaydargol commented 4 years ago

NER için oluşturulan modeli kullanmaya çalıştığımda şu şekilde hata alıyordum: Exception in thread "main" java.lang.NumberFormatException: For input string: "-0,097" at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2054) at java.base/jdk.internal.math.FloatingDecimal.parseFloat(FloatingDecimal.java:122) at java.base/java.lang.Float.parseFloat(Float.java:461) at zemberek.core.data.Weights.loadFromLines(Weights.java:48) at zemberek.core.data.Weights.loadFromFile(Weights.java:42) at zemberek.ner.PerceptronNer$ClassModel.load(PerceptronNer.java:254) at zemberek.ner.PerceptronNer.loadModel(PerceptronNer.java:78) at app.App.Predict(App.java:47) at app.App.main(App.java:62) modelin klasör yapısı ise şu şekilde: image

O.ner.model dosyasının ilk iki satırı: -0,097 CWLongLemma:yönetim -0,162 CW+NW+2NW:testsüreçlerikonusunda

ilk satırdaki "-0,097" sayısı float a cast edilemediği için kod hata fırlatıyor. bunu "-0.097" şeklinde değiştirirsek ilk satırı düzgün okuyup yukarıdaki hatayı bu sefer 2. satır için veriyor. Exception in thread "main" java.lang.NumberFormatException: For input string: "-0,162" at

yusufcakmakk commented 4 years ago

Duplicate of #https://github.com/ahmetaa/zemberek-nlp/issues/244

ahmetaa commented 4 years ago

Isletim sistemi Windows mu?

ahmetaa commented 4 years ago

Bunun nedeni model kaydedilirken String.format kullanilmasi. Burada noktali sayilarda varsayilan Locale kullaniliyor.

Weights sinifi saveAsText() icerisindeki

    try (PrintWriter pw = new PrintWriter(file.toFile(), "utf-8")) {
      for (String s : data.getKeyList()) {
        pw.println(String.format("%.3f %s", data.get(s), s));
      }
    }

Bunu duzeltmek icin

    try (PrintWriter pw = new PrintWriter(file.toFile(), "utf-8")) {
      for (String s : data.getKeyList()) {
        pw.println(String.format(Locale.ENGLISH, "%.3f %s", data.get(s), s));
      }
    }

Gerekiyor.

alihaydargol commented 4 years ago

Windows'ta aşağıdaki ayarları yaptığımda düzeldi:

Control Panel -> Change date,time, or number formats -> Additional Settings ekranında ağadaki gibi yaptım image Windows -> Settings -> Time & Language -> Date, time, & regional formatting ekranında ise aşağıdakiler yapıldı image

Sorun muhtmelen işletim sistemini İnglizce kullanıp bölgesel format olarak Türkçe kullanmamdan kaynaklı.

ahmetaa commented 4 years ago

Garantiye almak icin gerekli degisikligi yapacagim.