Teraz jest 27 lis 2024 2:47:52




Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 21 ]  Przejdź na stronę 1, 2  Następna strona
Słownik języka polskiego 
Autor Wiadomość
Użytkownik
Avatar użytkownika

Dołączył(a): 13 lut 2012 21:52:18
Posty: 98
Lokalizacja: Radom
eCzytnik: Kindle Voyage
Post Słownik języka polskiego
Największy, najlepiej dopracowany na ten moment słownik języka polskiego dla Kindle, do pobrania na blogu:

http://eczytniki.blogspot.com/2016/04/sownik-jezyka-polskiego-opracowanie.html

W pełni legalny i darmowy. Oparty na bazie słów ze strony sjp.pl, Rozwinięcie i uaktualnienie pracy Sana Zamoyskiego - więcej treści, ponad dwa razy mniejszy rozmiar.

Zapraszam do pobierania, testowania i zgłaszania ewentualnych błędów.


Ostatnio edytowano 30 kwi 2016 22:28:29 przez athame, łącznie edytowano 1 raz



30 kwi 2016 12:57:48
Zobacz profil
Użytkownik
Avatar użytkownika

Dołączył(a): 21 lip 2011 9:46:47
Posty: 286
eCzytnik: KoboT,NST,NGP,K3G, KPW2,KPW3,TolV2
Post Re: Słownik języka polskiego
Działa świetnie.
Zauważyłam trochę śmieci w haśle „Aachen”.
Osobiście zrobiłabym jeszcze kilka zamian estetycznych (sam wielokrotnie wspominasz, że warto dążyć do doskonałości):
* spacja dywiz spacja -> spacja półpauza spacja
* spacja cudzysłów -> spacja cudzysłów otwierający („)
* pozostałe cudzysłowy -> cudzysłów zamykający (”)
Potem sprawdziłabym, czy cudzysłowy mają swoje pary i wprowadziła ewentualne poprawki, zapisując sobie konkretne hasła, w których występuje problem, aby w przyszłej wersji poprawki poszły szybciej.

No i może w następnej edycji dodać jakąś okładkę? Będzie ładniej wyglądało na czytniku :)


30 kwi 2016 18:56:23
Zobacz profil
SwiatCzytnikow.pl
Avatar użytkownika

Dołączył(a): 14 sie 2010 11:00:21
Posty: 1873
eCzytnik: kindle, onyx, nook, kobo, pb, ipad
Post Re: Słownik języka polskiego
Screeny na blogu się nie wyświetlają, po kliknięciu błąd 403. A słownik zaraz potestuję.

_________________
http://swiatczytnikow.pl (dawniej: Świat Kindle)
http://ebooki.swiatczytnikow.pl - (prawie) wszystkie polskie e-booki w jednym miejscu, czyli porównywarka ofert księgarni.


30 kwi 2016 23:16:22
Zobacz profil WWW
Użytkownik
Avatar użytkownika

Dołączył(a): 21 lip 2011 9:46:47
Posty: 286
eCzytnik: KoboT,NST,NGP,K3G, KPW2,KPW3,TolV2
Post Re: Słownik języka polskiego
* Rozumiem, że chodzi o hasła wieloznaczne takie jak abba, Abba/ABBA (choć różnią się odmianami i definicjami).
Haseł, które mają dwie powtórzone definicje (przy różnym zapisie) jest 4804, a takich, które mają trzy definicje – 62.

* Ponieważ Kindle (chyba) nie potrafi wyszukiwać w słowniku odmian z dywizem, np. ADM-u, ckm-em itp. – można zapewne odchudzić słownik o wszystkie odmiany z dywizem, bo i tak nie zostaną wyszukane. Sprawa do zbadania.

* Cudzysłów jest zapisany jako encja:
Kod:
"

* Te „śmieci” są tylko 61 razy i rzeczywiście łatwo je usunąć.


01 maja 2016 0:31:11
Zobacz profil
Użytkownik
Avatar użytkownika

Dołączył(a): 21 lip 2011 9:46:47
Posty: 286
eCzytnik: KoboT,NST,NGP,K3G, KPW2,KPW3,TolV2
Post Re: Słownik języka polskiego
Jak policzyłam hasła – skrótowo, ale jako programista na pewno się połapiesz.
  • Całość w pliku html przeleciałam wyrażeniem regularnym zamieniającym:
    Kod:
    <idx

    na
    Kod:
    \n<idx

  • Potem jeszcze raz:
    Kod:
    <h2

    na
    Kod:
    \n<h2

    Czyli miałam hasła wydzielone w wersach, które zaczynały się od znacznika h2, definicje haseł oraz wszelkie inne elementy (odmiany etc.)
  • Dla przyspieszenia pracy posortowałam plik i wszystko oprócz wersów ze znacznikiem h2 na początku – usunęłam. Zostały hasła i definicje.
  • Zawartość pliku zmieniłam na małe litery (lowercase).
  • Potem
    Kod:
    sort sjp.html | uniq --count >sjp.tmp

    I już miałam plik z numerami, które oznaczały ile razy powtarzały się konkretne wersy.
  • Znowu sortowanie – tym razem po to, aby mieć plik z posortowaną liczbą z przodu.
  • Usunięcie tych wersów, które miały jedynkę z przodu (bo to oznaczało, że taki wers się nie powtarzał – definicja była tylko jedna).
  • Zostały mi tylko dwójki i trójki. Sprawdziłam ile ich jest i dodałam tę informację do postu.

----------------------

Jeszcze w sprawie ADM-u. U mnie nie działa. PW3 5.6.5 JB

Obrazek


01 maja 2016 10:22:58
Zobacz profil
Użytkownik
Avatar użytkownika

Dołączył(a): 13 lut 2012 21:52:18
Posty: 98
Lokalizacja: Radom
eCzytnik: Kindle Voyage
Post Re: Słownik języka polskiego
W sprawie odmian z dywizami:

Obrazek Obrazek

Tak więc zostają. W następnej publicznej wersji zrobię to tak, że i u Ciebie zadziałają.


01 maja 2016 12:01:55
Zobacz profil
Użytkownik
Avatar użytkownika

Dołączył(a): 21 lip 2011 9:46:47
Posty: 286
eCzytnik: KoboT,NST,NGP,K3G, KPW2,KPW3,TolV2
Post Re: Słownik języka polskiego
athame napisał(a):
Tak więc zostają. W następnej publicznej wersji zrobię to tak, że i u Ciebie zadziałają.

Super.

Ale, ale... Znalazłam coś, co może być błędem w mechanizmie słownikowym czytnika, ale warto zbadać.
  • Dla słowa muzyki pokazuje definicję Mużyk.
  • Dla słowa łaski podaje cztery znaczenia: łaski, Łaski, laski, Laski, ale nie podaje formy podstawowej: łaska.
  • Dla słowa leki podaje trzy znaczenia: Łęki, łęki, lęki, ale nie podaje formy podstawowej: lek.
  • Dla słowa kącie podaje znaczenie: kata, ale nie podaje formy podstawowej: kąt.
  • Dla słowa kąta podaje dwa znaczenia: Kata, kata, ale nie podaje formy podstawowej: kąt.

To mój tekst testowy.

Kod:
<h1>Testy słownika</h1>
<p>Bez muzyki ABB-y nie wyobrażamy sobie lat siedemdziesiątych.</p>
<p>Poszłam rano do ADM-u zgłosić kradzież drzwi piwnicznych.</p>
<p>Dziadek podpierał się laską, chodził o lasce.</p>
<p>Nie chcesz, to nie rób! Obejdzie się bez łaski.</p>
<p>Kupiłam w aptece leki, bo w nocy miałam lęki.</p>
<p>Po zażyciu leków, bo w nocy nie mam lęków.</p>
<p>Nalałam benzyny do dwóch baków, przycięłam Pawłowi baki i odganiałam się od bąków.</p>
<p>Poszłam do kąta, gdyż w kącie jest fajnie.</p>
<p>Janek sam, bez żony, wszedł do zony śmierci.</p>


Nie znajduje wcale słów żony i zony.
Przykład z bakiem jest bardzo ciekawy, bo ładnie pokazuje, że przydałoby się rozdzielenie haseł wieloznacznych.


01 maja 2016 12:46:25
Zobacz profil
Użytkownik
Avatar użytkownika

Dołączył(a): 13 lut 2012 21:52:18
Posty: 98
Lokalizacja: Radom
eCzytnik: Kindle Voyage
Post Re: Słownik języka polskiego
Becky napisał(a):
Ale, ale... Znalazłam coś, co może być błędem w mechanizmie słownikowym czytnika, ale warto zbadać.


To jest prawdopodobnie nie do przeskoczenia. Mechanizm słownikowy bazuje na indeksie, który ignoruje znaki spoza kodowania ISO-* właściwego do używanego języka? Ta część nie bazuje na UTF i dopóki Amazon nie doda oficjalnie polskiego to można sobie co najwyżej patch'ować system. To bynajmniej nie jest ani mały, ani prosty mod.

Mam jeszcze jeden pomysł jak to „oszukać”, ale nie wiem czy zadziała. Poza tym troszkę (delikatniukto ujmując) zwiększy rozmiar słownika. Sprawdzę i za kilkanaście minut napiszę jak się sprawy mają.

Część problemów rozwiązana np:

Obrazek

a niektóre pozostałe są kłopotliwe, bo zależą do FW czytnika, a nie pliku słownika.


Ostatnio edytowano 06 paź 2018 21:52:43 przez athame, łącznie edytowano 1 raz



01 maja 2016 13:37:13
Zobacz profil
Użytkownik
Avatar użytkownika

Dołączył(a): 21 lip 2011 9:46:47
Posty: 286
eCzytnik: KoboT,NST,NGP,K3G, KPW2,KPW3,TolV2
Post Re: Słownik języka polskiego
Jest nieźle.
Poprawiłabym jeszcze
Kod:
&#039;
na ładny apostrof. Kindle ładnie wyszukuje obie formy:
Kod:
<p>c'est la vie – takie jest życie</p>
<p>c’est la vie – takie jest życie</p>
<p>commedia dell'arte</p>
<p>commedia dell’arte</p>
<p>A'Tomek był jedną z głównych postaci…</p>
<p>A’Tomek był jedną z głównych postaci…</p>

Z poprzednich testów u mnie nie działają „leki” i „żony”, ale i tak jest dużo lepiej.
No i są piękne cudzysłowy i półpauzy, co IMHO znacząco polepsza odbiór definicji.


06 maja 2016 9:49:45
Zobacz profil
Użytkownik
Avatar użytkownika

Dołączył(a): 13 lut 2012 21:52:18
Posty: 98
Lokalizacja: Radom
eCzytnik: Kindle Voyage
Post Re: Słownik języka polskiego
Omówienie testu na bazie tekstu zaproponowanego przez Becky: http://eczytniki.blogspot.com/2016/05/testy-sownika-jezyka-polskiego.html.


Ostatnio edytowano 06 paź 2018 21:54:15 przez athame, łącznie edytowano 1 raz



11 maja 2016 20:11:34
Zobacz profil
Użytkownik
Avatar użytkownika

Dołączył(a): 22 sty 2014 19:44:49
Posty: 184
eCzytnik: Kindle Voyage, Paperwhite, Classic
Post Re: Słownik języka polskiego
Czy gdzieś opublikowałeś zmodyfikowaną wersję pliku tab2opf.py?

_________________
Robert Błaut
http://blog.blaut.biz
poczta: listy małpa blaut kropa biz


21 maja 2016 21:56:43
Zobacz profil WWW
Użytkownik
Avatar użytkownika

Dołączył(a): 22 sty 2014 19:44:49
Posty: 184
eCzytnik: Kindle Voyage, Paperwhite, Classic
Post Re: Słownik języka polskiego
athame napisał(a):
Póki co nie, ale mogę to zrobić po oczyszczeniu kodu. Ogólnie nie ma dużych zmian, a jedynie poprawki estetyczne i wyeliminowanie tego co i tak ucina kindlegen.

Byłoby fajnie :) Na gihubie znalazłem też inne zmiany: https://github.com/apeyser/tab2opf

_________________
Robert Błaut
http://blog.blaut.biz
poczta: listy małpa blaut kropa biz


22 maja 2016 10:08:08
Zobacz profil WWW
Użytkownik
Avatar użytkownika

Dołączył(a): 13 lut 2012 21:52:18
Posty: 98
Lokalizacja: Radom
eCzytnik: Kindle Voyage
Post Re: Słownik języka polskiego
Np. taki jest OK - tzn. kindlegen nie zgłasza zastrzeżeń, a całość działa zgodnie z oczekiwaniami:
Kod:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Script for conversion of Stardict tabfile (<header>\t<definition>
# per line) into the OPF file for MobiPocket Dictionary

# VERSION
VERSION = "0.1.2"

# Necessary files:
# - slo.tab - dictionary in format headword 1[tab]definition 1[new line]headword 2[tab]definiton2
# - odm.txt - inflections in format: base of word 1, inflection 1, inflection 2[new line]base of word 2, inflection 1
# script doesn't require parameters, names of files are fixed (slo.tab and odm.txt) and encoding as UTF-8 is forced

import sys
import re
import os

from unicodedata import normalize, decomposition, combining
import string
from exceptions import UnicodeEncodeError

# Hand-made table from PloneTool.py
mapping_custom_1 =  {
138: 's', 142: 'z', 154: 's', 158: 'z', 159: 'Y' }

# UnicodeData.txt does not contain normalization of Greek letters.
mapping_greek = {
912: 'i', 913: 'A', 914: 'B', 915: 'G', 916: 'D', 917: 'E', 918: 'Z',
919: 'I', 920: 'TH', 921: 'I', 922: 'K', 923: 'L', 924: 'M', 925: 'N',
926: 'KS', 927: 'O', 928: 'P', 929: 'R', 931: 'S', 932: 'T', 933: 'Y',
934: 'F', 936: 'PS', 937: 'O', 938: 'I', 939: 'Y', 940: 'a', 941: 'e',
943: 'i', 944: 'y', 945: 'a', 946: 'b', 947: 'g', 948: 'd', 949: 'e',
950: 'z', 951: 'i', 952: 'th', 953: 'i', 954: 'k', 955: 'l', 956: 'm',
957: 'n', 958: 'ks', 959: 'o', 960: 'p', 961: 'r', 962: 's', 963: 's',
964: 't', 965: 'y', 966: 'f', 968: 'ps', 969: 'o', 970: 'i', 971: 'y',
972: 'o', 973: 'y' }

# This may be specific to German...
mapping_two_chars = {
140 : 'O', 156: 'o', 196: 'A', 246: 'o', 252: 'u', 214: 'O',
228 : 'a', 220: 'U', 223: 's', 230: 'e', 198: 'E' }

mapping_latin_chars = {
192 : 'A', 193 : 'A', 194 : 'A', 195 : 'a', 197 : 'A', 199 : 'C', 200 : 'E',
201 : 'E', 202 : 'E', 203 : 'E', 204 : 'I', 205 : 'I', 206 : 'I', 207 : 'I',
208 : 'D', 209 : 'N', 210 : 'O', 211 : 'O', 212 : 'O', 213 : 'O', 215 : 'x',
216 : 'O', 217 : 'U', 218 : 'U', 219 : 'U', 221 : 'Y', 224 : 'a', 225 : 'a',
226 : 'a', 227 : 'a', 229 : 'a', 231 : 'c', 232 : 'e', 233 : 'e', 234 : 'e',
235 : 'e', 236 : 'i', 237 : 'i', 238 : 'i', 239 : 'i', 240 : 'd', 241 : 'n',
242 : 'o', 243 : 'o', 244 : 'o', 245 : 'o', 248 : 'o', 249 : 'u', 250 : 'u',
251 : 'u', 253 : 'y', 255 : 'y' }

mapping = {}
mapping.update(mapping_custom_1)
mapping.update(mapping_greek)
mapping.update(mapping_two_chars)
mapping.update(mapping_latin_chars)

whitespace = ''.join([c for c in string.whitespace if ord(c) < 128])
allowed = string.ascii_letters + string.digits + string.punctuation + whitespace

def normalizeUnicode(text, encoding='humanascii'):

    unicodeinput = True
    if not isinstance(text, unicode):
        text = unicode(text, 'utf-8')
        unicodeinput = False

    res = ''
    global allowed
    if encoding == 'humanascii':
        enc = 'ascii'
    else:
        enc = encoding
    for ch in text:
        if (encoding == 'humanascii') and (ch in allowed):
            res += ch
            continue
        else:
            try:
                ch.encode(enc,'strict')
                res += ch
            except UnicodeEncodeError:
                ordinal = ord(ch)
                if mapping.has_key(ordinal):
                    res += mapping.get(ordinal)
                elif decomposition(ch) or len(normalize('NFKD',ch)) > 1:
                    normalized = filter(lambda i: not combining(i), normalize('NFKD', ch)).strip()
                    res += ''.join([c for c in normalized if c in allowed])
                else:
                    res += "%x" % ordinal
    if unicodeinput:
        return res
    else:
        return res.encode('utf-8')

OPFTEMPLATEHEAD1 = """<?xml version="1.0"?><!DOCTYPE package SYSTEM "oeb1.ent">

<package unique-identifier="uid" xmlns:dc="Dublin Core">

<metadata>
   <dc-metadata>
      <dc:Identifier id="uid">Slownik Jezyka Polskiego</dc:Identifier>
      <dc:Title><h2>Słownik Języka Polskiego</h2></dc:Title>
      <dc:Creator><h3>Athame</h3></dc:Creator>
                <dc:Source><h4>sjp.pl – 11 V 2016 r</h4></dc:Source>
      <dc:Language>PL</dc:Language>
   </dc-metadata>
   <x-metadata>
"""
OPFTEMPLATEHEADNOUTF = """      <output encoding="Windows-1252" flatten-dynamic-dir="yes"/>"""
OPFTEMPLATEHEAD2 = """
      <DictionaryInLanguage>pl</DictionaryInLanguage>
      <DictionaryOutLanguage>pl</DictionaryOutLanguage>
   </x-metadata>
</metadata>

<manifest>
        <item id="cover" href="cover.jpeg" media-type="image/jpeg"/>   
"""

OPFTEMPLATELINE = """        <item id="dictionary%d" href="%s%d.html" media-type="text/x-oeb1-document"/>
"""

OPFTEMPLATEMIDDLE = """</manifest>


<spine>
"""

OPFTEMPLATELINEREF = """   <itemref idref="dictionary%d"/>
"""

OPFTEMPLATEEND = """</spine>

<tours/>
<guide>
        <reference type="search" title="Dictionary Search" onclick= "index_search()"/>
        <reference href="cover.jpeg" title="Cover" type="cover" />   
</guide>

</package>
"""

################################################################
# MAIN
################################################################

# fixed filenames: definitions: slo.tab; inflection: odm.txt

FILENAME = 'slo.tab'
UTFINDEX = True

fr = open(FILENAME,'rb')
name = os.path.splitext(os.path.basename(FILENAME))[0]

odm = {}
odmianay = open("odm.txt")
for line in odmianay:
    try:
        line = re.search('(?P<hea>[^,]*?), (?P<def>.*)', line)
        podstawa = line.group('hea')
        odmiany = line.group('def')
        odmiana = '<idx:infl inflgrp="odmiany">'
        for slowo in odmiany.split(', '):
            odmiana += "\n    <idx:iform name=\"odmiana\" value=\"%s\" />" % (slowo)
        odmiana += '\n</idx:infl>'
        odm[podstawa.lower()] = odmiana
    except:
        pass

i = 0
to = False

for r in fr.xreadlines():
   
    if i % 10000 == 0:
        if to:
            to.write("""
                </mbp:frameset>
              </body>
            </html>
            """)
            to.close()
        to = open("%s%d.html" % (name, i / 10000), 'w')

        to.write(u"""<?xml version="1.0" encoding="utf-8"?>
<html xmlns:idx="www.mobipocket.com" xmlns:mbp="www.mobipocket.com" xmlns:xlink="http://www.w3.org/1999/xlink">
  <body>
    <mbp:pagebreak/>
    <mbp:frameset>
      <mbp:slave-frame display="bottom" device="all" breadth="auto" leftmargin="0" rightmargin="0" bottommargin="0" topmargin="0">
        <div align="center" bgcolor="yellow">
        <p>Dictionary Search</p>
        </div>
      </mbp:slave-frame>
      <mbp:pagebreak/>
""")

    dt, dd =  r.split('\t',1)

    if not UTFINDEX:
        dt = normalizeUnicode(dt,'cp1252')
        dd = normalizeUnicode(dd,'cp1252')
    #dtstrip = normalizeUnicode( dt )
    dtstrip = dt
    if not dt.lower() in odm:
        odm[dt.lower()] = ''
    dd = dd.replace("\\\\","\\").replace("\\n","<br/>\n")
    to.write("""<idx:entry name="word" scriptable="yes">
<h3>
  <idx:orth>%s%s</idx:orth>\n<idx:key key="%s" />
</h3>
%s</idx:entry>

<hr />

""" % (dt, odm[dt.lower()], dtstrip, dd))
    print dt
    i += 1

to.write("""
    </mbp:frameset>
  </body>
</html>
""")
to.close()
fr.close()
lineno = i - 1

to = open("%s.opf" % name, 'w')
to.write(OPFTEMPLATEHEAD1)
if not UTFINDEX:
    to.write(OPFTEMPLATEHEADNOUTF)
to.write(OPFTEMPLATEHEAD2)
for i in range(0,(lineno/10000)+1):
    to.write(OPFTEMPLATELINE % (i, name, i))
to.write(OPFTEMPLATEMIDDLE)
for i in range(0,(lineno/10000)+1):
    to.write(OPFTEMPLATELINEREF % i)
to.write(OPFTEMPLATEEND)


22 maja 2016 11:10:04
Zobacz profil
Użytkownik
Avatar użytkownika

Dołączył(a): 22 sty 2014 19:44:49
Posty: 184
eCzytnik: Kindle Voyage, Paperwhite, Classic
Post Re: Słownik języka polskiego
Dzięki :)

_________________
Robert Błaut
http://blog.blaut.biz
poczta: listy małpa blaut kropa biz


22 maja 2016 11:20:53
Zobacz profil WWW
Użytkownik

Dołączył(a): 05 wrz 2016 21:41:31
Posty: 2
eCzytnik: Kindle Voyage
Post Re: Słownik języka polskiego
Przygotowałem Ci okładkę, jest pod tym linkiem: https://www.sendspace.com/file/74mzx0
Może się spodoba. Pozdrawiam


05 wrz 2016 21:52:50
Zobacz profil
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 21 ]  Przejdź na stronę 1, 2  Następna strona


Kto przegląda forum

Użytkownicy przeglądający to forum: Brak zalogowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów

Skocz do:  
cron