Skip to content

Commit 88ef082

Browse files
committed
feat: upgrade to grammalecte v2.1.1 and start to hava a functionnal run command
1 parent 2b300a2 commit 88ef082

37 files changed

+29467
-19402
lines changed

extension.js

+15-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const vscode = require("vscode");
22
const { spawn } = require("child_process");
3+
const path = require("path");
34

45
/**
56
* @param {vscode.ExtensionContext} context
@@ -8,14 +9,20 @@ function activate(context) {
89
let disposable = vscode.commands.registerCommand(
910
"grammalecte.run",
1011
function () {
11-
const grammalecte = spawn("python3", [
12-
"grammalecte-cli.py",
13-
"-f",
14-
"demo/input-file/input.txt",
15-
]);
16-
grammalecte.stdout.on("data", (data) => {
17-
vscode.window.showInformationMessage(`stdout: ${data}`);
18-
});
12+
const editor = vscode.window.activeTextEditor;
13+
if (editor) {
14+
const file = editor.document.uri.path;
15+
const grammalecte = spawn("python3", [
16+
context.asAbsolutePath("grammalecte-cli.py"),
17+
"--json",
18+
"--file",
19+
file,
20+
]);
21+
grammalecte.stdout.on("data", (data) => {
22+
const json = JSON.parse(data.toString());
23+
console.log(json);
24+
});
25+
}
1926
}
2027
);
2128

grammalecte-cli.py

100644100755
+40-14
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@
88
import os.path
99
import argparse
1010
import json
11+
import itertools
1112
import re
1213
import traceback
1314

1415
import grammalecte
1516
import grammalecte.text as txt
17+
import grammalecte.graphspell.str_transform as strt
1618
from grammalecte.graphspell.echo import echo
1719

1820

@@ -27,7 +29,8 @@
2729
!word spelling suggestion
2830
>word draw path of word in the word graph
2931
=[filter1][=[filter2]] show entries which fit to filters (filter1 for word, filter2 for morphology)
30-
$some_text show sentences and tokens of text
32+
≠word|word|… show distance between words
33+
$some_text show sentences and tokens of text
3134
3235
Other commands:
3336
/help /h show this text
@@ -129,6 +132,10 @@ def getCommand ():
129132

130133
def main ():
131134
"launch the CLI (command line interface)"
135+
if sys.version_info < (3, 5):
136+
print("Python 3.5+ required")
137+
return
138+
132139
xParser = argparse.ArgumentParser()
133140
xParser.add_argument("-f", "--file", help="parse file (UTF-8 required!) [on Windows, -f is similar to -ff]", type=str)
134141
xParser.add_argument("-ff", "--file_to_file", help="parse file (UTF-8 required!) and create a result file (*.res.txt)", type=str)
@@ -153,7 +160,6 @@ def main ():
153160

154161
oGrammarChecker = grammalecte.GrammarChecker("fr")
155162
oSpellChecker = oGrammarChecker.getSpellChecker()
156-
oLexicographer = oGrammarChecker.getLexicographer()
157163
oTextFormatter = oGrammarChecker.getTextFormatter()
158164
if xArgs.personal_dict:
159165
oJSON = loadDictionary(xArgs.personal_dict)
@@ -271,8 +277,10 @@ def main ():
271277
for sWord in sText[1:].strip().split():
272278
if sWord:
273279
echo("* " + sWord)
274-
for sMorph in oSpellChecker.getMorph(sWord):
275-
echo(" {:<32} {}".format(sMorph, oLexicographer.formatTags(sMorph)))
280+
for sElem, aRes in oSpellChecker.analyze(sWord):
281+
echo(" - " + sElem)
282+
for sMorph, sMeaning in aRes:
283+
echo(" {:<40} {}".format(sMorph, sMeaning))
276284
elif sText.startswith("!"):
277285
for sWord in sText[1:].strip().split():
278286
if sWord:
@@ -291,6 +299,11 @@ def main ():
291299
sTagsPattern = ""
292300
for aRes in oSpellChecker.select(sFlexPattern, sTagsPattern):
293301
echo("{:<30} {:<30} {}".format(*aRes))
302+
elif sText.startswith("≠"):
303+
lWords = sText[1:].split("|")
304+
for s1, s2 in itertools.combinations(lWords, 2):
305+
nDist = strt.distanceDamerauLevenshtein(s1, s2)
306+
print(f"{s1}{s2}: {nDist}")
294307
elif sText.startswith("/o+ "):
295308
oGrammarChecker.gce.setOptions({ opt:True for opt in sText[3:].strip().split() if opt in oGrammarChecker.gce.getOptions() })
296309
echo("done")
@@ -329,18 +342,31 @@ def main ():
329342
if xArgs.textformatter:
330343
sParagraph = oTextFormatter.formatText(sParagraph)
331344
lParagraphErrors, lSentences = oGrammarChecker.gce.parse(sParagraph, bDebug=xArgs.debug, bFullInfo=True)
332-
echo(txt.getReadableErrors(lParagraphErrors, xArgs.width))
345+
#echo(txt.getReadableErrors(lParagraphErrors, xArgs.width))
333346
for dSentence in lSentences:
334-
echo("{nStart}:{nEnd}".format(**dSentence))
335-
echo(" <" + dSentence["sSentence"]+">")
336-
for dToken in dSentence["lToken"]:
337-
echo(" {0[nStart]:>3}:{0[nEnd]:<3} {1} {0[sType]:<14} {2} {0[sValue]:<16} {3:<10} {4}".format(dToken, \
338-
"×" if dToken.get("bToRemove", False) else " ",
339-
"!" if dToken["sType"] == "WORD" and not dToken.get("bValidToken", False) else " ",
340-
" ".join(dToken.get("lMorph", "")), \
341-
"·".join(dToken.get("aTags", "")) ) )
342-
echo(txt.getReadableErrors(dSentence["lGrammarErrors"], xArgs.width))
347+
echo("{nStart}:{nEnd} <{sSentence}>".format(**dSentence))
348+
for dToken in dSentence["lTokens"]:
349+
if dToken["sType"] == "INFO" or "bMerged" in dToken:
350+
continue
351+
echo(" {0[nStart]:>3}:{0[nEnd]:<3} {1} {0[sType]:<14} {2} {0[sValue]:<16} {3}".format(dToken, \
352+
"×" if dToken.get("bToRemove", False) else " ",
353+
"!" if dToken["sType"] == "WORD" and not dToken.get("bValidToken", False) else " ",
354+
" ".join(dToken.get("aTags", "")) ) )
355+
if "lMorph" in dToken:
356+
for sMorph, sLabel in zip(dToken["lMorph"], dToken["aLabels"]):
357+
echo(" {0:40} {1}".format(sMorph, sLabel))
358+
if "lSubTokens" in dToken:
359+
for dSubToken in dToken["lSubTokens"]:
360+
if dSubToken["sValue"]:
361+
echo(" · {0:20}".format(dSubToken["sValue"]))
362+
for sMorph, sLabel in zip(dSubToken["lMorph"], dSubToken["aLabels"]):
363+
echo(" {0:40} {1}".format(sMorph, sLabel))
364+
#echo(txt.getReadableErrors(dSentence["lGrammarErrors"], xArgs.width))
343365
else:
366+
if sText.startswith("TEST: "):
367+
sText = sText[6:]
368+
sText = sText.replace("{{", "").replace("}}", "")
369+
sText = re.sub(" ->> .*$", "", sText).rstrip()
344370
for sParagraph in txt.getParagraph(sText):
345371
if xArgs.textformatter:
346372
sParagraph = oTextFormatter.formatText(sParagraph)

0 commit comments

Comments
 (0)