1
+ """Functions Related to Sense Keys"""
2
+
1
3
from typing import Callable , Optional
2
4
3
5
import wn
41
43
]
42
44
43
45
44
- def sensekey_getter (lexicon : str ) -> SensekeyGetter :
45
- if lexicon in METADATA_LEXICONS :
46
-
47
- def getter (sense : wn .Sense ) -> Optional [str ]:
48
- return sense .metadata ().get ('identifier' )
49
-
50
- elif lexicon in SENSE_ID_LEXICONS :
51
- lexid , _ = split_lexicon_specifier (lexicon )
52
- prefix_len = len (lexid ) + 1
53
-
54
- def getter (sense : wn .Sense ) -> Optional [str ]:
55
- sensekey = sense .id [prefix_len :]
56
- # check if sense id is likely an escaped sensekey
57
- if '__' in sensekey :
58
- return unescape_oewn_sense_key (sense .id [prefix_len :])
59
- return None
60
-
61
- else :
62
- raise wn .Error (f'no sensekey getter is defined for { lexicon } ' )
63
-
64
- return getter
65
-
66
-
67
- def unescape_oewn_sense_key (sense_key : str ) -> str :
46
+ def _unescape_oewn_sense_key (sense_key : str ) -> str :
68
47
lemma , _ , rest = sense_key .partition ('__' )
69
48
for esc , char in OEWN_LEMMA_UNESCAPE_SEQUENCES :
70
49
lemma = lemma .replace (esc , char )
@@ -75,7 +54,7 @@ def unescape_oewn_sense_key(sense_key: str) -> str:
75
54
return lemma
76
55
77
56
78
- def escape_oewn_sense_key (sense_key : str ) -> str :
57
+ def _escape_oewn_sense_key (sense_key : str ) -> str :
79
58
lemma , _ , rest = sense_key .partition ('%' )
80
59
for esc , char in OEWN_LEMMA_UNESCAPE_SEQUENCES :
81
60
lemma = lemma .replace (char , esc )
@@ -86,24 +65,47 @@ def escape_oewn_sense_key(sense_key: str) -> str:
86
65
return lemma
87
66
88
67
68
+ def sense_key_getter (lexicon : str ) -> SensekeyGetter :
69
+ if lexicon in METADATA_LEXICONS :
70
+
71
+ def getter (sense : wn .Sense ) -> Optional [str ]:
72
+ return sense .metadata ().get ('identifier' )
73
+
74
+ elif lexicon in SENSE_ID_LEXICONS :
75
+ lexid , _ = split_lexicon_specifier (lexicon )
76
+ prefix_len = len (lexid ) + 1
77
+
78
+ def getter (sense : wn .Sense ) -> Optional [str ]:
79
+ sense_key = sense .id [prefix_len :]
80
+ # check if sense id is likely an escaped sense key
81
+ if '__' in sense_key :
82
+ return _unescape_oewn_sense_key (sense .id [prefix_len :])
83
+ return None
84
+
85
+ else :
86
+ raise wn .Error (f'no sense key getter is defined for { lexicon } ' )
87
+
88
+ return getter
89
+
90
+
89
91
def sense_getter (lexicon : str , wordnet : Optional [wn .Wordnet ] = None ) -> SenseGetter :
90
92
if wordnet is None :
91
93
wordnet = wn .Wordnet (lexicon )
92
94
93
95
if lexicon in METADATA_LEXICONS :
94
- get_sensekey = sensekey_getter (lexicon )
95
- sensekey_map = {get_sensekey (s ): s for s in wordnet .senses ()}
96
- if None in sensekey_map :
97
- sensekey_map .pop (None ) # senses without sense keys
96
+ get_sense_key = sense_key_getter (lexicon )
97
+ sense_key_map = {get_sense_key (s ): s for s in wordnet .senses ()}
98
+ if None in sense_key_map :
99
+ sense_key_map .pop (None ) # senses without sense keys
98
100
99
- def getter (sensekey : str ) -> Optional [wn .Sense ]:
100
- return sensekey_map .get (sensekey )
101
+ def getter (sense_key : str ) -> Optional [wn .Sense ]:
102
+ return sense_key_map .get (sense_key )
101
103
102
104
elif lexicon in SENSE_ID_LEXICONS :
103
105
lexid , _ = split_lexicon_specifier (lexicon )
104
106
105
- def getter (sensekey : str ) -> Optional [wn .Sense ]:
106
- sense_id = f'{ lexid } -{ escape_oewn_sense_key ( sensekey )} '
107
+ def getter (sense_key : str ) -> Optional [wn .Sense ]:
108
+ sense_id = f'{ lexid } -{ _escape_oewn_sense_key ( sense_key )} '
107
109
try :
108
110
return wordnet .sense (sense_id )
109
111
except wn .Error :
0 commit comments