saol 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- saol-0.1.0/.gitignore +14 -0
- saol-0.1.0/.python-version +1 -0
- saol-0.1.0/PKG-INFO +77 -0
- saol-0.1.0/README.md +69 -0
- saol-0.1.0/data/saol14-faksimil.jsonl.license +1 -0
- saol-0.1.0/download_saol_facsimile.py +49 -0
- saol-0.1.0/exempel.py +17 -0
- saol-0.1.0/ordlista.py +4 -0
- saol-0.1.0/ordlista.txt +126900 -0
- saol-0.1.0/parse_saol_facsimile.py +104 -0
- saol-0.1.0/pyproject.toml +24 -0
- saol-0.1.0/src/saol/__init__.py +2 -0
- saol-0.1.0/src/saol/py.typed +0 -0
- saol-0.1.0/src/saol/types.py +7 -0
- saol-0.1.0/uv.lock +8 -0
saol-0.1.0/.gitignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|
saol-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: saol
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Publicly available SAOL as a simple Python library
|
|
5
|
+
Project-URL: Homepage, https://github.com/Liffon/python-saol
|
|
6
|
+
Requires-Python: >=3.9
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
|
|
9
|
+
# python-saol
|
|
10
|
+
|
|
11
|
+
Python-paketering av den senaste SAOL-utgåvan som är fritt tillgänglig, SAOL 14 från 2015[^1].
|
|
12
|
+
|
|
13
|
+
SAOL 14 är licensierad under Creative Commons Attribution 4.0 International (CC-BY-4.0).
|
|
14
|
+
|
|
15
|
+
Mer information om SAOL som datakälla: https://spraakbanken.gu.se/resurser/historiska-saol
|
|
16
|
+
|
|
17
|
+
Jag som gjort det här pythonpaketet har ingen koppling till SAOL, Språkbanken eller Göteborgs universitet.
|
|
18
|
+
|
|
19
|
+
## Användning
|
|
20
|
+
|
|
21
|
+
Ordlistan exponeras som en enkel lista med ord, ordklass och böjningar. Ett exempel på användning:
|
|
22
|
+
|
|
23
|
+
```python
|
|
24
|
+
from saol import saol14
|
|
25
|
+
|
|
26
|
+
print(f"Ordlistan innehåller {len(saol14)} ord.")
|
|
27
|
+
print("Första ordet i listan:")
|
|
28
|
+
print(saol14[0])
|
|
29
|
+
print()
|
|
30
|
+
|
|
31
|
+
part_of_speech_by_word = {entry.word: entry.upos for entry in saol14}
|
|
32
|
+
|
|
33
|
+
for word in "en putslustig talgoxe äter finfördelad goja".split():
|
|
34
|
+
upos = part_of_speech_by_word.get(word, None)
|
|
35
|
+
if upos:
|
|
36
|
+
print(
|
|
37
|
+
f'"{word}" finns i ordlistan och är märkt med ordklassen {upos}.'
|
|
38
|
+
)
|
|
39
|
+
else:
|
|
40
|
+
print(f'"{word}" finns inte i ordlistan.')
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Exemplet ger följande utskrift:
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
Ordlistan innehåller 126900 ord.
|
|
47
|
+
Första ordet i listan:
|
|
48
|
+
SaolEntry(word='a', upos='NOUN', conj='a:et; pl. a:n el. a, best. pl. a:na')
|
|
49
|
+
|
|
50
|
+
"en" finns i ordlistan och är märkt med ordklassen X.
|
|
51
|
+
"putslustig" finns i ordlistan och är märkt med ordklassen ADJ.
|
|
52
|
+
"talgoxe" finns i ordlistan och är märkt med ordklassen NOUN.
|
|
53
|
+
"äter" finns inte i ordlistan.
|
|
54
|
+
"finfördelad" finns inte i ordlistan.
|
|
55
|
+
"goja" finns i ordlistan och är märkt med ordklassen NOUN.
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Notera att endast ord i grundform förekommer i listan: `finfördela` finns med, men inte `finfördelad`.
|
|
59
|
+
Likaså `äta` men inte `äter`.
|
|
60
|
+
|
|
61
|
+
Det finns också ett antal "ord" (2432 stycken) som består av flera ord, till exempel `haka på`, `fylla i` samt `ruska av sig`.
|
|
62
|
+
|
|
63
|
+
## Framtida arbete
|
|
64
|
+
|
|
65
|
+
- Tillgänggliggör böjningar av ord. Här bör man kunna använda `conj`-fältet (motsvarande `conj` i faksimilfilen)
|
|
66
|
+
för att härleda hur andra former ser ut.
|
|
67
|
+
|
|
68
|
+
## Om indataformatet
|
|
69
|
+
|
|
70
|
+
Här följer lite anteckningar kring indatan i faksimilfilen, som laddas ner från Språkbanken då paketet byggs.
|
|
71
|
+
|
|
72
|
+
- Ordklasser i `upos`-fältet är taggade enligt [Universal Dependencies](https://universaldependencies.org/).
|
|
73
|
+
- Ordklasser i `ordkl`-fältet är taggade på svenska, och ibland även med böjningssuffix i en `<i></i>`-tagg.
|
|
74
|
+
- `normaliserat_ord` är normalt det ord man vill använda, då det är rensat från betoningsmarkeringar och liknande.
|
|
75
|
+
- `text`-fältet verkar innehålla samma sak som böjningssuffixen i `ordkl`-fältet.
|
|
76
|
+
|
|
77
|
+
[^1]: Svenska Akademien (2025). SAOL 14 (2015) - faksimil (uppdaterad: 2025-12-11). [Data set]. Språkbanken Text. https://doi.org/10.23695/fqh2-af42
|
saol-0.1.0/README.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# python-saol
|
|
2
|
+
|
|
3
|
+
Python-paketering av den senaste SAOL-utgåvan som är fritt tillgänglig, SAOL 14 från 2015[^1].
|
|
4
|
+
|
|
5
|
+
SAOL 14 är licensierad under Creative Commons Attribution 4.0 International (CC-BY-4.0).
|
|
6
|
+
|
|
7
|
+
Mer information om SAOL som datakälla: https://spraakbanken.gu.se/resurser/historiska-saol
|
|
8
|
+
|
|
9
|
+
Jag som gjort det här pythonpaketet har ingen koppling till SAOL, Språkbanken eller Göteborgs universitet.
|
|
10
|
+
|
|
11
|
+
## Användning
|
|
12
|
+
|
|
13
|
+
Ordlistan exponeras som en enkel lista med ord, ordklass och böjningar. Ett exempel på användning:
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
from saol import saol14
|
|
17
|
+
|
|
18
|
+
print(f"Ordlistan innehåller {len(saol14)} ord.")
|
|
19
|
+
print("Första ordet i listan:")
|
|
20
|
+
print(saol14[0])
|
|
21
|
+
print()
|
|
22
|
+
|
|
23
|
+
part_of_speech_by_word = {entry.word: entry.upos for entry in saol14}
|
|
24
|
+
|
|
25
|
+
for word in "en putslustig talgoxe äter finfördelad goja".split():
|
|
26
|
+
upos = part_of_speech_by_word.get(word, None)
|
|
27
|
+
if upos:
|
|
28
|
+
print(
|
|
29
|
+
f'"{word}" finns i ordlistan och är märkt med ordklassen {upos}.'
|
|
30
|
+
)
|
|
31
|
+
else:
|
|
32
|
+
print(f'"{word}" finns inte i ordlistan.')
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Exemplet ger följande utskrift:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
Ordlistan innehåller 126900 ord.
|
|
39
|
+
Första ordet i listan:
|
|
40
|
+
SaolEntry(word='a', upos='NOUN', conj='a:et; pl. a:n el. a, best. pl. a:na')
|
|
41
|
+
|
|
42
|
+
"en" finns i ordlistan och är märkt med ordklassen X.
|
|
43
|
+
"putslustig" finns i ordlistan och är märkt med ordklassen ADJ.
|
|
44
|
+
"talgoxe" finns i ordlistan och är märkt med ordklassen NOUN.
|
|
45
|
+
"äter" finns inte i ordlistan.
|
|
46
|
+
"finfördelad" finns inte i ordlistan.
|
|
47
|
+
"goja" finns i ordlistan och är märkt med ordklassen NOUN.
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Notera att endast ord i grundform förekommer i listan: `finfördela` finns med, men inte `finfördelad`.
|
|
51
|
+
Likaså `äta` men inte `äter`.
|
|
52
|
+
|
|
53
|
+
Det finns också ett antal "ord" (2432 stycken) som består av flera ord, till exempel `haka på`, `fylla i` samt `ruska av sig`.
|
|
54
|
+
|
|
55
|
+
## Framtida arbete
|
|
56
|
+
|
|
57
|
+
- Tillgänggliggör böjningar av ord. Här bör man kunna använda `conj`-fältet (motsvarande `conj` i faksimilfilen)
|
|
58
|
+
för att härleda hur andra former ser ut.
|
|
59
|
+
|
|
60
|
+
## Om indataformatet
|
|
61
|
+
|
|
62
|
+
Här följer lite anteckningar kring indatan i faksimilfilen, som laddas ner från Språkbanken då paketet byggs.
|
|
63
|
+
|
|
64
|
+
- Ordklasser i `upos`-fältet är taggade enligt [Universal Dependencies](https://universaldependencies.org/).
|
|
65
|
+
- Ordklasser i `ordkl`-fältet är taggade på svenska, och ibland även med böjningssuffix i en `<i></i>`-tagg.
|
|
66
|
+
- `normaliserat_ord` är normalt det ord man vill använda, då det är rensat från betoningsmarkeringar och liknande.
|
|
67
|
+
- `text`-fältet verkar innehålla samma sak som böjningssuffixen i `ordkl`-fältet.
|
|
68
|
+
|
|
69
|
+
[^1]: Svenska Akademien (2025). SAOL 14 (2015) - faksimil (uppdaterad: 2025-12-11). [Data set]. Språkbanken Text. https://doi.org/10.23695/fqh2-af42
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Source: https://doi.org/10.23695/fqh2-af42 License: CC-BY-4.0
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
from shutil import copyfileobj
|
|
3
|
+
from typing import Any, NamedTuple
|
|
4
|
+
from urllib.parse import urlparse
|
|
5
|
+
from urllib.request import urlopen
|
|
6
|
+
|
|
7
|
+
import tomllib
|
|
8
|
+
from hatchling.builders.hooks.plugin.interface import BuildHookInterface
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class WordlistDefinition(NamedTuple):
|
|
12
|
+
url: str
|
|
13
|
+
license_notice: str
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def read_wordlists() -> list[WordlistDefinition]:
|
|
17
|
+
with open("pyproject.toml", "rb") as f:
|
|
18
|
+
return [
|
|
19
|
+
WordlistDefinition(**entry)
|
|
20
|
+
for entry in tomllib.load(f)["saol"]["wordlist"]
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class CustomBuildHook(BuildHookInterface):
|
|
25
|
+
PLUGIN_NAME = "saol-downloader"
|
|
26
|
+
|
|
27
|
+
def initialize(self, version: str, build_data: dict[str, Any]):
|
|
28
|
+
breakpoint()
|
|
29
|
+
|
|
30
|
+
wordlists = read_wordlists()
|
|
31
|
+
|
|
32
|
+
data_dir = Path(self.root, "data")
|
|
33
|
+
data_dir.mkdir(parents=True, exist_ok=True)
|
|
34
|
+
|
|
35
|
+
for wordlist in wordlists:
|
|
36
|
+
parsed_url = urlparse(wordlist.url)
|
|
37
|
+
filename = Path(parsed_url.path).name
|
|
38
|
+
|
|
39
|
+
wordlist_path = data_dir / filename
|
|
40
|
+
license_path = wordlist_path.with_name(f"{filename}.license")
|
|
41
|
+
|
|
42
|
+
with (
|
|
43
|
+
urlopen(wordlist.url) as response,
|
|
44
|
+
open(wordlist_path, "wb") as output_file,
|
|
45
|
+
):
|
|
46
|
+
copyfileobj(response, output_file)
|
|
47
|
+
|
|
48
|
+
with open(license_path, "w") as f:
|
|
49
|
+
f.write(wordlist.license_notice)
|
saol-0.1.0/exempel.py
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from saol import saol14
|
|
2
|
+
|
|
3
|
+
print(f"Ordlistan innehåller {len(saol14)} ord.")
|
|
4
|
+
print("Första ordet i listan:")
|
|
5
|
+
print(saol14[0])
|
|
6
|
+
print()
|
|
7
|
+
|
|
8
|
+
part_of_speech_by_word = {entry.word: entry.upos for entry in saol14}
|
|
9
|
+
|
|
10
|
+
for word in "en putslustig talgoxe äter finfördelad goja".split():
|
|
11
|
+
upos = part_of_speech_by_word.get(word, None)
|
|
12
|
+
if upos:
|
|
13
|
+
print(
|
|
14
|
+
f'"{word}" finns i ordlistan och är märkt med ordklassen {upos}.'
|
|
15
|
+
)
|
|
16
|
+
else:
|
|
17
|
+
print(f'"{word}" finns inte i ordlistan.')
|
saol-0.1.0/ordlista.py
ADDED