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 ADDED
@@ -0,0 +1,14 @@
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+
9
+ # Virtual environments
10
+ .venv
11
+
12
+ # Files generated by building
13
+ data/saol*-faksimil.jsonl
14
+ src/saol/wordlist
@@ -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
@@ -0,0 +1,4 @@
1
+ from saol import saol14
2
+
3
+ for entry in saol14:
4
+ print(entry.word)