commit af91885d48d5b1243df1fafc638ed0ebffbe92cc
parent 862c23e7de7de8edc7dcba6fc44347eaa2f1bbfb
Author: Antoine Amarilli <a3nm@a3nm.net>
Date: Fri, 1 Feb 2013 16:48:21 +0100
Support for ambiguous forms such as 'hélas'
Diffstat:
4 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/additions b/additions
@@ -28,3 +28,5 @@
1 hadopi
0 hellénisme
0 hiatus
+0 hélas
+1 hélas
diff --git a/haspirater.json b/haspirater.json
@@ -1 +1 @@
-["0", {"a": ["1", {"b": ["0", {"a": ["1", {}], "o": ["1", {}]}], "d": ["1", {"o": ["1", {"p": ["1", {"i": ["1", {"s": ["0", {}]}]}]}], "r": ["0", {}]}], "l": ["1", {"e": ["1", {"i": ["0", {}]}], "i": ["1", {"o": ["0", {}]}], "\u00e8": ["1", {"n": ["0", {}]}], "l": ["1", {"a": ["1", {"l": ["0", {}]}], "u": ["0", {}]}]}], "r": ["1", {"m": ["0", {}]}], "v": ["0", {"a": ["1", {}], "e": ["0", {" ": ["1", {}], "l": ["0", {"e": ["0", {"r": ["1", {}]}], "\u00e9": ["0", {"e": ["0", {" ": ["1", {}]}]}]}], "n": ["1", {}], "s": ["1", {}], "r": ["1", {}], "u": ["1", {}]}], "i": ["1", {}], "r": ["1", {}], "u": ["1", {}]}], "\u00ff": ["0", {}]}], " ": ["1", {}], "\u00e2": ["1", {}], "e": ["0", {"a": ["1", {"u": ["1", {"t": ["0", {}]}]}], "i": ["1", {}], "m": ["1", {}], "l": ["0", {"l": ["0", {"e": ["1", {"s": ["0", {}]}], "o": ["1", {}]}]}], "n": ["1", {}], "p": ["1", {}], "s": ["1", {}], "r": ["0", {"c": ["1", {"u": ["0", {}]}], "m": ["0", {"i": ["0", {"t": ["1", {"a": ["0", {}]}]}]}], "n": ["1", {}], "p": ["1", {}], "s": ["1", {}], "t": ["1", {}]}], "u": ["0", {"s": ["1", {}], "r": ["0", {"t": ["1", {}]}], "l": ["1", {}], "/": ["1", {}]}], "t": ["1", {}]}], "i": ["0", {"a": ["1", {"t": ["1", {"u": ["0", {}]}]}], " ": ["1", {}], "c": ["1", {}], "b": ["0", {"o": ["1", {}]}], "e": ["1", {"r": ["0", {}]}], "d": ["1", {}], "g": ["1", {}], "f": ["1", {}], "\u00e9": ["1", {}], "h": ["1", {}], "l": ["1", {"a": ["0", {"i": ["1", {}]}], "d": ["1", {"e": ["1", {"s": ["0", {}]}]}]}], "n": ["1", {"d": ["1", {"o": ["0", {}]}]}], "p": ["0", {"p": ["0", {"i": ["1", {}]}], "h": ["1", {}], " ": ["1", {}]}], "s": ["0", {"s": ["1", {}]}], "r": ["1", {"o": ["1", {"n": ["0", {}]}]}], "t": ["1", {}]}], "\u00e8": ["1", {"b": ["0", {}]}], "\u00ea": ["1", {}], "l": ["1", {}], "o": ["0", {" ": ["1", {}], "c": ["1", {}], "b": ["1", {}], "d": ["1", {}], "g": ["1", {}], "h": ["1", {}], "m": ["0", {"a": ["1", {}], " ": ["1", {}], "e": ["1", {}]}], "l": ["1", {"o": ["0", {}]}], "o": ["1", {}], "n": ["0", {" ": ["1", {}], "d": ["1", {}], "g": ["1", {}], "n": ["0", {"i": ["1", {}]}], "s": ["1", {}], "t": ["1", {}]}], "q": ["1", {}], "p": ["1", {}], "s": ["0", {"a": ["1", {}]}], "r": ["0", {"d": ["1", {}], "i": ["0", {"o": ["1", {}]}], "m": ["1", {"o": ["0", {}]}], "n": ["1", {}], "s": ["1", {}]}], "u": ["1", {}], "t": ["1", {}], "w": ["1", {}], "y": ["1", {}]}], "\u00e9": ["0", {"b": ["0", {"\u00e9": ["0", {"c": ["1", {}]}]}], "l": ["0", {"i": ["0", {"p": ["1", {}]}], "a": ["1", {"s": ["0", {}]}], "e": ["1", {}], "\u00e9": ["1", {}], "\u00e8": ["1", {}]}], "q": ["1", {}], "r": ["1", {"i": ["0", {"s": ["1", {}]}], "\u00e9": ["0", {}], "o": ["1", {"\u00ef": ["0", {}]}]}]}], "\u00e1": ["1", {}], "u": ["1", {"d": ["0", {}], "i": ["1", {"l": ["0", {}], "s": ["0", {}]}], "m": ["0", {"a": ["0", {"i": ["0", {" ": ["1", {}], "s": ["1", {}], "e": ["1", {}], "t": ["1", {}]}], " ": ["1", {}], "g": ["1", {}], "n": ["0", {"t": ["1", {}]}]}], " ": ["1", {}], "b": ["0", {"l": ["0", {"e": ["0", {"s": ["1", {}]}]}], "o": ["1", {}]}], "e": ["0", {" ": ["1", {}], "m": ["1", {}], "n": ["1", {}], "r": ["1", {}], "u": ["0", {"x": ["1", {}]}], "z": ["1", {}]}], "i": ["0", {"o": ["1", {}]}], "\u00e9": ["1", {}], "\u00e8": ["1", {}], "o": ["1", {}], "p": ["1", {}]}], "\u00ee": ["0", {}]}], "\u00f4": ["0", {"l": ["1", {}]}], "y": ["0", {"a": ["1", {}]}]}]
+[["0"], {"a": [["1"], {"b": [["0"], {"a": [["1"], {}], "o": [["1"], {}]}], "d": [["1"], {"o": [["1", "0"], {"p": [["1", "0"], {"i": [["1", "0"], {" ": [["1"], {}], "s": [["0"], {}]}]}]}], "r": [["0"], {}]}], "l": [["1"], {"e": [["1"], {"i": [["0"], {}]}], "i": [["1", "0"], {"b": [["1"], {}], "o": [["0"], {}]}], "\u00e8": [["1"], {"n": [["0"], {}]}], "l": [["1"], {"a": [["1"], {"l": [["0"], {}]}], "u": [["0"], {}]}]}], "r": [["1"], {"m": [["0"], {}]}], "v": [["0"], {"a": [["1"], {}], "e": [["0"], {" ": [["1"], {}], "l": [["0"], {"e": [["0"], {"r": [["1", "0"], {}]}], "\u00e9": [["0"], {"e": [["0"], {" ": [["1", "0"], {}]}]}]}], "n": [["1"], {}], "s": [["1"], {}], "r": [["1"], {}], "u": [["1"], {}]}], "i": [["1"], {}], "r": [["1"], {}], "u": [["1"], {}]}], "\u00ff": [["0"], {}]}], " ": [["1", "0"], {}], "\u00e2": [["1"], {}], "e": [["0"], {"a": [["1"], {"u": [["1"], {"t": [["0"], {}]}]}], "i": [["1"], {}], "m": [["1"], {}], "l": [["0"], {"l": [["0"], {"e": [["0"], {"b": [["1"], {}]}], "o": [["1"], {}]}]}], "n": [["1"], {}], "p": [["1"], {}], "s": [["1"], {}], "r": [["0"], {"c": [["1"], {"u": [["0"], {}]}], "m": [["0"], {"i": [["0"], {"t": [["0"], {"i": [["1"], {}]}]}]}], "n": [["1"], {}], "p": [["1"], {}], "s": [["1"], {}], "t": [["1"], {}]}], "u": [["0"], {"s": [["1"], {}], "r": [["0"], {"t": [["1"], {}]}], "l": [["1"], {}], "/": [["1"], {}]}], "t": [["1"], {}]}], "i": [["0"], {"a": [["1", "0"], {"t": [["1", "0"], {"a": [["1"], {}], "u": [["0"], {}]}]}], " ": [["1"], {}], "c": [["1"], {}], "b": [["0"], {"o": [["1"], {}]}], "e": [["1"], {"r": [["0"], {" ": [["1", "0"], {}]}]}], "d": [["1"], {}], "g": [["1"], {}], "f": [["1"], {}], "\u00e9": [["1"], {}], "h": [["1"], {}], "l": [["1", "0"], {"a": [["0"], {"i": [["1"], {}]}], "b": [["1"], {}], "e": [["1"], {}], "d": [["1", "0"], {"e": [["1", "0"], {"s": [["0"], {}], "g": [["1"], {}]}]}], "o": [["1"], {}]}], "n": [["1"], {"d": [["1", "0"], {"i": [["1"], {}], "o": [["0"], {}]}]}], "p": [["0"], {"p": [["0"], {"i": [["1"], {}]}], "h": [["1"], {}], " ": [["1"], {}]}], "s": [["0"], {"s": [["1"], {}]}], "r": [["1"], {"o": [["1"], {"n": [["0"], {}]}]}], "t": [["1"], {}]}], "\u00e8": [["1"], {"b": [["0"], {}]}], "\u00ea": [["1"], {}], "l": [["1"], {}], "o": [["0"], {" ": [["1"], {}], "c": [["1"], {}], "b": [["1"], {}], "d": [["1"], {}], "g": [["1"], {}], "h": [["1"], {}], "m": [["0"], {"a": [["1"], {}], " ": [["1"], {}], "e": [["1"], {}]}], "l": [["1"], {"o": [["0"], {}]}], "o": [["1"], {}], "n": [["0"], {" ": [["1"], {}], "d": [["1"], {}], "g": [["1"], {}], "n": [["0"], {"i": [["1"], {}]}], "s": [["1"], {}], "t": [["1"], {}]}], "q": [["1"], {}], "p": [["1"], {}], "s": [["0"], {"a": [["1"], {}]}], "r": [["0"], {"d": [["1"], {}], "i": [["0"], {"o": [["1"], {}]}], "m": [["1", "0"], {"i": [["1"], {}], "o": [["0"], {}]}], "n": [["1"], {}], "s": [["1"], {}]}], "u": [["1"], {}], "t": [["1"], {}], "w": [["1"], {}], "y": [["1"], {}]}], "\u00e9": [["0"], {"b": [["0"], {"\u00e9": [["0"], {"c": [["1"], {}]}]}], "l": [["0"], {"i": [["0"], {"p": [["1"], {}]}], "a": [["1"], {"s": [["0"], {" ": [["1", "0"], {}]}]}], "e": [["1"], {}], "\u00e9": [["1"], {}], "\u00e8": [["1"], {}]}], "q": [["1"], {}], "r": [["1"], {"i": [["0"], {"s": [["1"], {}]}], "\u00e9": [["0"], {}], "o": [["1"], {"\u00ef": [["0"], {}]}]}]}], "\u00e1": [["1"], {}], "u": [["1"], {"d": [["0"], {}], "i": [["1"], {"l": [["0"], {}], "s": [["0"], {}]}], "m": [["0"], {"a": [["0"], {"i": [["0"], {" ": [["1"], {}], "s": [["1"], {}], "e": [["1"], {}], "t": [["1"], {}]}], " ": [["1"], {}], "g": [["1"], {}], "n": [["0"], {"t": [["1"], {}]}]}], " ": [["1"], {}], "b": [["0"], {"l": [["0"], {"e": [["0"], {" ": [["1", "0"], {}], "s": [["1", "0"], {}]}]}], "o": [["1"], {}]}], "e": [["0"], {" ": [["1"], {}], "m": [["1"], {}], "n": [["1"], {}], "r": [["1"], {}], "u": [["0"], {"x": [["1"], {}]}], "z": [["1"], {}]}], "i": [["0"], {"o": [["1"], {}]}], "\u00e9": [["1"], {}], "\u00e8": [["1"], {}], "o": [["1"], {}], "p": [["1"], {}]}], "\u00ee": [["0"], {}]}], "\u00f4": [["0"], {"l": [["1"], {}]}], "y": [["0"], {"a": [["1"], {}]}]}]
diff --git a/haspirater.py b/haspirater.py
@@ -21,16 +21,18 @@ def lookup(key):
"""Return True iff key starts with an aspirated 'h'"""
if key == '' or key[0] != 'h':
raise ValueError
- return do_lookup(trie, key[1:] + ' ') == '1'
+ return list(map((lambda x: x == "1"), do_lookup(trie, key[1:] + ' ')))
def wrap_lookup(line):
line = line.lower().lstrip().rstrip()
try:
result = lookup(line)
- if result:
+ if True in result and not False in result:
print("%s: aspirated" % line)
- else:
+ elif False in result and not True in result:
print("%s: not aspirated" % line)
+ else:
+ print("%s: ambiguous" % line)
except ValueError:
print("%s: no leading 'h'" % line)
diff --git a/majoritytrie.py b/majoritytrie.py
@@ -9,12 +9,17 @@ import sys
trie = json.load(sys.stdin)
def get_majority(d):
- """What is the most probable value?"""
- return max(d, key=d.get)
+ """What are the most probable values?"""
+ mx = max(d.values())
+ return [k for k in d.keys() if d[k] == mx]
def majority(trie):
- """Keep only the most probable value at each node"""
- trie[0] = get_majority(trie[0])
+ """Keep only the most probable values at each node"""
+ if len(trie[1].keys()) == 0:
+ # keep all options at leaf nodes
+ trie[0] = list(trie[0].keys())
+ else:
+ trie[0] = get_majority(trie[0])
useless = []
for child in trie[1].keys():
majority(trie[1][child])