Grammalecte  Check-in [e67b500b7b]

Overview
Comment:[fr] thesaurus builder (merging synsets)
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr
Files: files | file ages | folders
SHA3-256: e67b500b7b8adbee2249ac560668cb8840183c656223f99192a0c7b76b7de6e0
User & Date: olr on 2019-06-26 18:54:17
Other Links: manifest | tags
Context
2019-06-26
23:06
[fr] update thésaurus check-in: 4c57a4f8ce user: olr tags: trunk, fr
18:54
[fr] thesaurus builder (merging synsets) check-in: e67b500b7b user: olr tags: trunk, fr
09:52
[fr] faux positifs et ajustements check-in: 6d9ee21a54 user: olr tags: trunk, fr
Changes

Modified gc_lang/fr/dictionnaire/genfrdic.py from [4b330e0ec5] to [05828a16a3].

17
18
19
20
21
22
23

24
25
26
27
28
29
30

from distutils import dir_util
from distutils import file_util
from string import Template

import metagraphe
import metaphone2



# Dictionnaire des caractères pour le tri naturel.
# Ordre souhaitable, mais pose problème pour la recherche, car engendre des égalités de lemmes différents.
# Il faut donc travailler sur un dictionnaire trié *numériquement* et le sauvegarder selon le tri *naturel*
CHARMAP = str.maketrans({ 'à': 'a',  'À': 'A',  'â': 'a',  'Â': 'A',  'ä': 'a',  'Ä': 'A',  'å': 'a',  'Å': 'A',  'ā': 'a',  'Ā': 'A',
                          'ç': 'c',  'Ç': 'C',







>







17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

from distutils import dir_util
from distutils import file_util
from string import Template

import metagraphe
import metaphone2
import thes_build


# Dictionnaire des caractères pour le tri naturel.
# Ordre souhaitable, mais pose problème pour la recherche, car engendre des égalités de lemmes différents.
# Il faut donc travailler sur un dictionnaire trié *numériquement* et le sauvegarder selon le tri *naturel*
CHARMAP = str.maketrans({ 'à': 'a',  'À': 'A',  'â': 'a',  'Â': 'A',  'ä': 'a',  'Ä': 'A',  'å': 'a',  'Å': 'A',  'ā': 'a',  'Ā': 'A',
                          'ç': 'c',  'Ç': 'C',
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
        #file_util.copy_file('_templates/ooo/dictionaries.xcu.tpl.xml', spExt)
        copyTemplate('_templates/ooo', spExt, 'package-description.txt', dTplVars)
        for dVars in lDictVars:
            dicPath = spBuild + '/' + PREFIX_DICT_PATH + self.sVersion
            file_util.copy_file(dicPath+'/'+dVars['asciiName']+'.dic', spExt+'/dictionaries/'+dVars['asciiName']+'.dic')
            file_util.copy_file(dicPath+'/'+dVars['asciiName']+'.aff', spExt+'/dictionaries/'+dVars['asciiName']+'.aff')
        copyTemplate('orthographe', spExt+'/dictionaries', 'README_dict_fr.txt', dTplVars)
        # thesaurus
        file_util.copy_file('thesaurus/thes_fr.dat', spExt+'/dictionaries')
        file_util.copy_file('thesaurus/thes_fr.idx', spExt+'/dictionaries')
        file_util.copy_file('thesaurus/README_thes_fr.txt', spExt+'/dictionaries')
        # hyphenation
        file_util.copy_file('césures/hyph_fr.dic', spExt+'/dictionaries')
        file_util.copy_file('césures/hyph_fr.iso8859-1.dic', spExt+'/dictionaries')
        file_util.copy_file('césures/frhyph.tex', spExt+'/dictionaries')
        file_util.copy_file('césures/hyph-fr.tex', spExt+'/dictionaries')
        file_util.copy_file('césures/README_hyph_fr-3.0.txt', spExt+'/dictionaries')
        file_util.copy_file('césures/README_hyph_fr-2.9.txt', spExt+'/dictionaries')







<
<
<
<







565
566
567
568
569
570
571




572
573
574
575
576
577
578
        #file_util.copy_file('_templates/ooo/dictionaries.xcu.tpl.xml', spExt)
        copyTemplate('_templates/ooo', spExt, 'package-description.txt', dTplVars)
        for dVars in lDictVars:
            dicPath = spBuild + '/' + PREFIX_DICT_PATH + self.sVersion
            file_util.copy_file(dicPath+'/'+dVars['asciiName']+'.dic', spExt+'/dictionaries/'+dVars['asciiName']+'.dic')
            file_util.copy_file(dicPath+'/'+dVars['asciiName']+'.aff', spExt+'/dictionaries/'+dVars['asciiName']+'.aff')
        copyTemplate('orthographe', spExt+'/dictionaries', 'README_dict_fr.txt', dTplVars)




        # hyphenation
        file_util.copy_file('césures/hyph_fr.dic', spExt+'/dictionaries')
        file_util.copy_file('césures/hyph_fr.iso8859-1.dic', spExt+'/dictionaries')
        file_util.copy_file('césures/frhyph.tex', spExt+'/dictionaries')
        file_util.copy_file('césures/hyph-fr.tex', spExt+'/dictionaries')
        file_util.copy_file('césures/README_hyph_fr-3.0.txt', spExt+'/dictionaries')
        file_util.copy_file('césures/README_hyph_fr-2.9.txt', spExt+'/dictionaries')
1500
1501
1502
1503
1504
1505
1506












1507
1508
1509
1510
1511
1512
1513
        with open(sPathFile, 'w', encoding='utf-8', newline="\n") as hDst:
            for t in self.lLex:
                hDst.write(str(t)+"\n")
            for e in self.dFlexions.items():
                hDst.write("{} - {}\n".format(e[0], e[1]))















def main ():
    xParser = argparse.ArgumentParser()
    xParser.add_argument("-v", "--verdic", help="set dictionary version, i.e. 5.4", type=str, default="X.Y.z")
    xParser.add_argument("-m", "--mode", help="0: no tags,  1: Hunspell tags (default),  2: All tags", type=int, choices=[0, 1, 2], default=1)
    xParser.add_argument("-u", "--uncompress", help="do not use Hunspell compression", action="store_true")
    xParser.add_argument("-s", "--simplify", help="no virtual lemmas", action="store_true")







>
>
>
>
>
>
>
>
>
>
>
>







1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
        with open(sPathFile, 'w', encoding='utf-8', newline="\n") as hDst:
            for t in self.lLex:
                hDst.write(str(t)+"\n")
            for e in self.dFlexions.items():
                hDst.write("{} - {}\n".format(e[0], e[1]))


def createThesaurusPackage (spBuild, sVersion, spCopy=""):
    print("Création du thésaurus")
    spThesaurus = spBuild+"/thesaurus-v"+sVersion
    dir_util.mkpath(spThesaurus)
    thes_build.build("thesaurus/thes_fr.dat", "thesaurus/synsets_fr.dat", spThesaurus)
    file_util.copy_file('thesaurus/README_thes_fr.txt', spThesaurus)
    if spCopy:
        # copy in libreoffice extension package
        file_util.copy_file(spThesaurus+'/thes_fr.dat', spCopy)
        file_util.copy_file(spThesaurus+'/thes_fr.idx', spCopy)
        file_util.copy_file(spThesaurus+'/README_thes_fr.txt', spCopy)


def main ():
    xParser = argparse.ArgumentParser()
    xParser.add_argument("-v", "--verdic", help="set dictionary version, i.e. 5.4", type=str, default="X.Y.z")
    xParser.add_argument("-m", "--mode", help="0: no tags,  1: Hunspell tags (default),  2: All tags", type=int, choices=[0, 1, 2], default=1)
    xParser.add_argument("-u", "--uncompress", help="do not use Hunspell compression", action="store_true")
    xParser.add_argument("-s", "--simplify", help="no virtual lemmas", action="store_true")
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568

1569
1570
1571
1572
1573

1574
1575
1576
1577
1578
1579
1580
1581
1582
    oStatsLex.addLexFromFile('lexique/corpus_data/stats_google_ngram_1.txt', 'G', 'Google 1-grams')
    oStatsLex.addLexFromFile('lexique/corpus_data/stats_frwiki.txt', 'W', 'Wikipédia')
    oStatsLex.addLexFromFile('lexique/corpus_data/stats_frwikisource.txt', 'S', 'Wikisource')
    oStatsLex.addLexFromFile('lexique/corpus_data/stats_litterature.txt', 'L', 'Littérature')
    oStatsLex.write(spBuild+'/test_lex.txt')
    oFrenchDict.calculateStats(oStatsLex, spfStats)

    ### écriture des paquets
    echo("Création des paquets...")

    spLexiconDestGL = "../../../lexicons"  if xArgs.grammalecte  else ""
    spLibreOfficeExtDestGL = "../oxt/Dictionnaires/dictionaries"  if xArgs.grammalecte  else ""
    spMozillaExtDestGL = ""  if xArgs.grammalecte  else "" # no more Hunspell dictionaries in Mozilla extensions for now
    spDataDestGL = "../data"  if xArgs.grammalecte  else ""


    if not xArgs.uncompress:
        oFrenchDict.defineAbreviatedTags(xArgs.mode, spfStats)
    oFrenchDict.createFiles(spBuild, [dTOUTESVAR, dCLASSIQUE, dREFORME1990], xArgs.mode, xArgs.simplify)
    oFrenchDict.createLexiconPackages(spBuild, xArgs.verdic, oStatsLex, spLexiconDestGL)
    oFrenchDict.createFileIfqForDB(spBuild)

    oFrenchDict.createLibreOfficeExtension(spBuild, dMOZEXT, [dTOUTESVAR, dCLASSIQUE, dREFORME1990], spLibreOfficeExtDestGL)
    oFrenchDict.createMozillaExtensions(spBuild, dMOZEXT, [dTOUTESVAR, dCLASSIQUE, dREFORME1990], spMozillaExtDestGL)
    oFrenchDict.createDictConj(spBuild, spDataDestGL)
    oFrenchDict.createDictDecl(spBuild, spDataDestGL)



if __name__ == '__main__':
    main()







|







>





>




<




1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588

1589
1590
1591
1592
    oStatsLex.addLexFromFile('lexique/corpus_data/stats_google_ngram_1.txt', 'G', 'Google 1-grams')
    oStatsLex.addLexFromFile('lexique/corpus_data/stats_frwiki.txt', 'W', 'Wikipédia')
    oStatsLex.addLexFromFile('lexique/corpus_data/stats_frwikisource.txt', 'S', 'Wikisource')
    oStatsLex.addLexFromFile('lexique/corpus_data/stats_litterature.txt', 'L', 'Littérature')
    oStatsLex.write(spBuild+'/test_lex.txt')
    oFrenchDict.calculateStats(oStatsLex, spfStats)

    ### Écriture des paquets
    echo("Création des paquets...")

    spLexiconDestGL = "../../../lexicons"  if xArgs.grammalecte  else ""
    spLibreOfficeExtDestGL = "../oxt/Dictionnaires/dictionaries"  if xArgs.grammalecte  else ""
    spMozillaExtDestGL = ""  if xArgs.grammalecte  else "" # no more Hunspell dictionaries in Mozilla extensions for now
    spDataDestGL = "../data"  if xArgs.grammalecte  else ""

    ### dictionnaires
    if not xArgs.uncompress:
        oFrenchDict.defineAbreviatedTags(xArgs.mode, spfStats)
    oFrenchDict.createFiles(spBuild, [dTOUTESVAR, dCLASSIQUE, dREFORME1990], xArgs.mode, xArgs.simplify)
    oFrenchDict.createLexiconPackages(spBuild, xArgs.verdic, oStatsLex, spLexiconDestGL)
    oFrenchDict.createFileIfqForDB(spBuild)
    createThesaurusPackage(spBuild, xArgs.verdic, spLibreOfficeExtDestGL)
    oFrenchDict.createLibreOfficeExtension(spBuild, dMOZEXT, [dTOUTESVAR, dCLASSIQUE, dREFORME1990], spLibreOfficeExtDestGL)
    oFrenchDict.createMozillaExtensions(spBuild, dMOZEXT, [dTOUTESVAR, dCLASSIQUE, dREFORME1990], spMozillaExtDestGL)
    oFrenchDict.createDictConj(spBuild, spDataDestGL)
    oFrenchDict.createDictDecl(spBuild, spDataDestGL)



if __name__ == '__main__':
    main()

Added gc_lang/fr/dictionnaire/thes_build.py version [34ec46a285].





















































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# Thesaurus builder

import os
import re


def readFile (spf):
    if os.path.isfile(spf):
        with open(spf, "r", encoding="utf-8") as hSrc:
            for sLine in hSrc:
                yield sLine.strip()
    else:
        print("# Error. File not found or not loadable: " + spf)



class ThesaurusBuilder ():

    def __init__ (self):
        # synsets
        self.dSynEntry = {}     # {sWord: iSynset}
        self.dSynset = {}       # {iSynset: lSynset}
        # thesaurus
        self.dThesEntry = {}    # {sWord: lWord}

    def readSynsets (self, spf):
        if not spf:
            return
        for i, sLine in enumerate(readFile(spf), 1):
            sPOS, *lSynset = sLine.split("|")
            lSynset = self._removeDuplicatesFrom(lSynset)
            self.dSynset[i] = lSynset
            for sWord in lSynset:
                if not sWord.endswith("*"):
                    if sWord not in self.dSynEntry:
                        self.dSynEntry[sWord] = [ (sPOS, i) ]
                    else:
                        self.dSynEntry[sWord].append( (sPOS, i) )

    def showSynsetEntries (self):
        for sWord, lSynset in self.dSynEntry.items():
            for sPOS, iSynset in lSynset:
                print(sWord, sPOS, "|".join(self.dSynset[iSynset]))

    def readThesaurus (self, spf):
        if not spf:
            return
        genRead = readFile(spf)
        sLine1 = next(genRead)
        sEntry = ""
        iEntryLine = 0
        nClass = 0
        nClassFound = 0
        for i, sLine in enumerate(genRead, 2):
            sLine = sLine.strip()
            if re.search(r"^[^|]+\|[1-9][0-9]*$", sLine):
                # new entry
                if nClass != nClassFound:
                    print("Ligne:", iEntryLine, ", nombre de liste incorrect")
                iEntryLine = i
                sEntry, sNum = sLine.split("|")
                self.dThesEntry[sEntry] = []
                nClass = int(sNum)
                nClassFound = 0
            else:
                # new list of synonyms
                nClassFound += 1
                sPOS, *lClass = sLine.split("|")
                lClass = self._removeDuplicatesFrom(lClass)
                self.dThesEntry[sEntry].append( (sPOS, lClass) )

    def showThesaurusEntries (self):
        for sWord, lClass in self.dThesEntry.items():
            for sPOS, lWord in lClass:
                print(sWord, sPOS, "|".join(lWord))

    def _removeDuplicatesFrom (self, lWord):
        return [ sWord.strip()  for sWord  in dict.fromkeys(lWord) ]  # remove duplicates: use <dict.fromkeys()> instead of <set()> to keep order

    def merge (self):
        for sWord, lSynset in self.dSynEntry.items():
            for sPOS, iSynset in lSynset:
                if sWord in self.dThesEntry:
                    self.dThesEntry[sWord].append( (sPOS, self.dSynset[iSynset]) )
                else:
                    self.dThesEntry[sWord] = [ (sPOS, self.dSynset[iSynset]) ]

    def write (self, spDest):
        nOffset = 0     # the offset for finding data is the number of bytes (-> encoding("utf-8"))
        dOffset = {}
        with open(spDest + "/thes_fr.dat", "w", encoding="utf-8", newline="\n") as hThes:
            sHeader = "UTF-8\n"
            hThes.write(sHeader)
            nOffset = len(sHeader.encode("utf-8"))
            for sWord, lClass in self.dThesEntry.items():
                dOffset[sWord] = nOffset
                sWordLine = sWord+"|"+str(len(lClass))+"\n"
                hThes.write(sWordLine)
                nOffset += len(sWordLine.encode("utf-8"))
                for sPOS, lWord in lClass:
                    sClassLine = sPOS+"|"+"|".join(lWord)+"\n"
                    hThes.write(sClassLine)
                    nOffset += len(sClassLine.encode("utf-8"))
        with open(spDest + "/thes_fr.idx", "w", encoding="utf-8", newline="\n") as hIndex:
            hIndex.write("UTF-8\n")
            hIndex.write(str(len(self.dThesEntry))+"\n")
            for sWord, nOffset in sorted(dOffset.items()):
                hIndex.write(sWord+"|"+str(nOffset)+"\n")


def build (spfThesaurus="", spfSynsets="", spDest="_build"):
    oThes = ThesaurusBuilder()
    oThes.readSynsets(spfSynsets)
    #oThes.showSynsetEntries()
    oThes.readThesaurus(spfThesaurus)
    #oThes.showThesaurusEntries()
    oThes.merge()
    oThes.write(spDest)


if __name__ == '__main__':
    build("thesaurus/thes_fr.dat", "thesaurus/synsets_fr.dat")

Deleted gc_lang/fr/dictionnaire/thesaurus/create_idx.py version [570f17f6e9].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import sys
import re
import codecs

def help ():
    print ""
    print "Syntax:"
    print "thes_convert.py filename"


def indexCreation (thfilename):
    # This method is a modified Python transcription of a Perl script (th_gen_idx.pl) 
    # made by Kevin B. Hendricks (see MyThes-1.0)
    """
    /*
     * Copyright 2003 Kevin B. Hendricks, Stratford, Ontario, Canada
     * And Contributors.  All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     *
     * 1. Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     *
     * 2. Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     *
     * 3. All modifications to the source code must be clearly marked as
     *    such.  Binary redistributions based on modified source code
     *    must be clearly marked as modified versions in the documentation
     *    and/or other materials provided with the distribution.
     *
     * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS 
     * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
     * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
     * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL 
     * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
     * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
     * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
     * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     * SUCH DAMAGE.
     *
     */
    """

    print("Creating the index file for the thesaurus ...")
    # we read the thesaurus
    entries = []
    pattern = re.compile('^[^|]+\|[1-9][0-9]*$')
    sourcefile = open(thfilename, 'r')
    encodingline = sourcefile.readline() # encoding
    fileOffset = len(encodingline)
    line = sourcefile.readline()
    i = 2
    while line != "" :
        while not re.search(pattern, line) :
            try:
                print(u"## Error at line %d. This line is not a new entry:\n%s" % (i, line))
            except:
                print(u"## Error at line %d. This line is not a new entry." % i)
            line = sourcefile.readline()
            i = i + 1
        offset = len(line)
        line = line.rstrip()
        entry, nbclass = line.split('|')
        nbcl = int(nbclass)
        for k in range(nbcl) :
            line = sourcefile.readline()
            offset = offset + len(line)
            i = i + 1
        entries.append((entry, fileOffset))
        fileOffset = fileOffset + offset
        line = sourcefile.readline()
        i = i + 1
    sourcefile.close()
    
    # we create the index
    entries.sort(elemsort)
    idxfilenames = thfilename.rsplit('.', 1)
    idxfilename = idxfilenames[0] + ".idx"
    destfile = open(idxfilename, 'w')
    destfile.write(encodingline)
    destfile.write("%d\n" % len(entries))
    for entry in entries :
        destfile.write("%s|%d\n" % (entry[0], entry[1]))
    destfile.close()
    print("Done.")


def main ():
    if len(sys.argv) != 2:
        help()
        return False
    
    indexCreation(sys.argv[1])

    
if __name__ == "__main__" :
    main()
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<






















































































































































































































Added gc_lang/fr/dictionnaire/thesaurus/synsets_fr.dat version [d79a3cf0cc].























































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
(nom)|aigreur|indignation|rancœur|rancune|dépit|ressentiment|amertume|acrimonie|antipathie|colère
(nom)|arbre|végétal|baliveau|tige|buisson|feuillu|résineux|arbuste|résinifère|tronc
(nom)|assemblée|communauté|confrérie|sororité|collectivité|compagnie|association|corporation|congrégation|clergé|coterie|loge|corps|Église|ordre|groupe|société
(nom)|atout|carte-maîtresse|carte-maitresse|as|joker
(nom)|âtre|feu|foyer|cheminée|réchaud|fourneau|chaufferette|brasero|chauffe-plat|tison|brasier|fournaise|chauffage|haut-fourneau|four
(nom)|axe|pivot|essieu|manivelle|bielle|embiellage|pivot|charnière|balancier|bras|arbre|transmission
(nom)|bordel|foutoir|chantier|désordre|galère|merdier|merde|bazar
(nom)|cadavre|défunt|mort|trépassé|esprit|spectre|âme|décédé|victime|dépouille|défunt|tué|disparu|martyr|souffre-douleur|corps
(verb)|capitulez|rendez-vous|acceptez|abandonnez|renoncez|repliez-vous|agenouillez-vous|soumettez-vous
(adj)|certain|indiscutable|indubitable|concret|positif|précis|net|patent|effectif|solide|sûr|sérieux|visible
(adj)|charnel|sexuel|physiologique|organique|physique
(nom)|chef|maître|maitre|responsable|dirigeant|patron|commandant|directeur|supérieur|leader|meneur|propriétaire|employeur|dictateur|tyran
(nom)|chocolatine|pain au chocolat
(nom)|clé|clef|rossignol|crochet|sésame|carouble|accès|passe|mot de passe|passe-partout
(nom)|colère|courroux|animosité|irritation|humeur|malveillance|inimitié|agressivité|haine|emportement|véhémence|ire|rage|exaspération|impatience|déchaînement|explosion|crise|irritation
(adj)|commun|ordinaire|normal|vulgaire|général|quelconque|terne|habituel|insignifiant|universel|global|consensuel|léger|vague
(adj)|concret|palpable|réel|matériel|corporel|physique|tangible|visible|solide
(nom)|conjonction|coïncidence|jonction|association|entremêlement|réunion|rendez-vous
(nom)|créateur|maître|maitre|dieu|divinité|déité|démiurge|verbe|idole|logos|éternel|père|artiste|maestro|virtuose|répétiteur|musicien
(nom)|destruction|combustion|calcination|incendie|incinération|oxydation|déflagration|flamboiement|ignition|sinistre|feu
(nom)|disparu|mort|décédé|trépassé|défunt|tué|passé|oublié|feu
(nom)|douleur|feu|brûlure|aigreur|ampoule|cloque|inflammation|irradiation|irritation|insolation|ulcération|rougeur|enfer|souffrance
(nom)|église|temple|mosquée|synagogue|cathédrale|cloître|chapelle|couvent|abbatiale|monastère|oratoire|sanctuaire|asile|basilique|ziggourat|presbytère|monument mégalithique|fanum
(nom)|entreprise|société|compagnie|holding|groupe|corporation|SARL|SA
(nom)|épée|sabre|katana|lame|rapière|cimeterre|yatagan|kriss|coupe-chou|glaive|poignard|dague|couteau|fleuret
(nom)|escrime|épéisme
(nom)|excrément|merde|selles|bouse|crottin|crotte|caca
(nom)|famille|lignage|foyer|maison|ménage|dynastie|descendance|progéniture|généalogie|souche|parentèle|race|sang|extraction|lignée|parenté|postérité|ascendance|filiation|racine|tronc|tige|branche
(nom)|fin|achèvement|extrémité|limite|terme|terminaison|terminus|queue|aboutissement|issue|épilogue|conclusion|dénouement|mort
(adj)|flou|vague|incertain|indistinct|indécis|brouillé|nébuleux|équivoque|confus|indéterminé|imprécis|obscur|douteux|ténébreux|ambigu|indéfini|vaporeux|brumeux|clair-obscur|évasif|imperceptible|incompréhensible|indiscernable|lâche|indéfinissable|abstrait|sombre|imparfait|approximatif|fumeux|fuligineux|délayé|inclassable|indéterminable|trouble|voilé|sibyllin|nuageux|estompé|inconsistant|diffus
(adj)|fluctuant|ondulant|changeant|fuyant|inconstant|flottant|vague
(nom)|force|puissance|énergie|attraction|gravitation|pénétration|portée|effet|ampleur|intensité|amplitude|étendue|immensité|importance|impact|efficacité
(adj)|foutu|râpé|terminé|fini|déglingué|mort
(adj)|hésitant|irrésolu|indécis|perplexe|inexpressif|atone|froid|négligé|vague
(adj)|inanimé|inerte|inactif|crevé|épuisé|immobile|stagnant|dormant|marécageux|stationnaire|mort
(nom)|lumière|feu|flamme|lanterne|fanal|flambeau|phare|flammes|flambée|flammèche|éblouissement|éclat|étincelle|embrasement|lueur|lumière|clarté|rayon|scintillement|éclair|illumination|fulgurance|luisance|phosphorescence|falot
(nom)|maladie|mal|crève|grippe|mort
(interj)|marre|assez|ça suffit|ras le bol|j’en peux plus
(nom)|matériel|outilllage|fourbi|attirail|barda|matériau|outil|mobilier|équipement|machine|matos|appareillage|instrument|hardware
(nom)|mentor|maître|maitre|enseignant|éducateur|initiateur|expert|savant|précepteur|formateur|professeur|pion|surveillant|éveilleur|instructeur|moniteur|pédagogue|instituteur|entraîneur|gourou
(nom)|mort|décès|trépas|agonie|glas|meurtre|anéantissement|disparition|extinction|consommation|suicide|assassinat|fin
(nom)|noblesse|excellence|sagesse|expérience|plénitude|profondeur|grandeur|élévation|mérite|valeur|maturité|force
(nom)|ordinateur|calculateur|machine|PC|calculatrice|micro-ordinateur|unité centrale|station|terminal|bécane|computer|tour|portable|ordinant|robot|androïde|gynoïde|marionnette|automate
(nom)|passion|feu|ardeur|fanatisme|emballement|délire|exaltation|ferveur|fièvre|frénésie|fureur|impétuosité|flamme|élan
(nom)|pouvoir|autorité|grâce|grandeur|gloire|domination|présence|charisme|influence|ascendant|stature|assurance|impassibilité|force
(nom)|prostituée|pute|catin|putain|péripatéticienne|hétaïre|courtisane|geisha|asphalteuse|belle-de-nuit|demi-mondaine|femme de mauvaise vie|femme publique|fille publique|fille de joie|fille de mauvaise vie|fille des rues|fleur de macadam|michetonneuse|poule|professionnelle|raccrocheuse|racoleuse|ribaude|sirène|tapineuse|traînée|trimardeuse|turfeuse|bagasse|cocotte|sirène
(nom)|réalité|réel|matériel|matériau|nature
(nom)|religion|confession|culte|croyance|Église
(nom)|rendez-vous|rancard|rancart|rencard|tête-à-tête|entretien|entrevue|audience|assignation|convocation|réunion|rencontre|match
(nom)|résistance|endurance|dureté|fermeté|invulnérabilité|inflexibilité|solidité|robustesse|patience|force
(nom)|sang|hémoglobine|plasma|sérum|cruor|sève|fluide vital
(nom)|seigneur|maître|maitre|roi|prince|empereur|monarque|majesté|magister|régent|sieur|sire|suzerain|hobereau|souverain|châtelain|paladin|aristocrate|franc-maçon|juge
(nom)|signal|drapeau|balise|déclencheur|déclic|signalement|alarme|feu|alerte
(nom)|solution|clé|clef|point-clé|réponse|conclusion|dénouement
(nom)|vague|onde|flot|vaguelette|ressac|marée|lame|flux|reflux|afflux|courant|eau|déferlement|torrent|onde de choc|raz-de-marée|houle|roulis|rut|rush|remous|déferlante|rouleau|fluctuation|déluge|pluie|ondée
(nom)|vigueur|activité|dynamisme|énergie|force|enthousiasme|sang
(nom)|vigueur|fougue|sève|activité|sang|tonicité|tonus|punch|verdeur|jeunesse|élan|ressort|impétuosité|dynamisme|impulsivité|vitalité|ardeur|virulence|véhémence|exaltation|force
(nom)|violence|force|tyrannie|despotisme|contrainte|oppression
(nom)|volonté|courage|audace|cran|détermination|constance|persévérance|résolution|ténacité|trempe|acharnement|persistance|force

Modified gc_lang/fr/modules/conj_data.py from [f9502006bf] to [79483966f2].

cannot compute difference between binary files

Modified gc_lang/fr/modules/phonet_data.py from [07fb54d0a8] to [b720d5cd9f].

cannot compute difference between binary files

Modified gc_lang/fr/oxt/Dictionnaires/dictionaries/fr-classique.aff from [d85769e650] to [793d991f9c].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

# AFFIXES DU DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “CLASSIQUE” v6.4.1
# par Olivier R. -- licence MPL 2.0
# Généré le 15-05-2019 à 08:25
# Pour améliorer le dictionnaire, allez sur https://grammalecte.net/



SET UTF-8

WORDCHARS -’'1234567890.






|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

# AFFIXES DU DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “CLASSIQUE” v6.4.1
# par Olivier R. -- licence MPL 2.0
# Généré le 26-06-2019 à 20:44
# Pour améliorer le dictionnaire, allez sur https://grammalecte.net/



SET UTF-8

WORDCHARS -’'1234567890.

Modified gc_lang/fr/oxt/Dictionnaires/dictionaries/fr-reforme1990.aff from [7ec124d4b1] to [91b4b5b4c4].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

# AFFIXES DU DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “RÉFORME 1990” v6.4.1
# par Olivier R. -- licence MPL 2.0
# Généré le 15-05-2019 à 08:25
# Pour améliorer le dictionnaire, allez sur https://grammalecte.net/



SET UTF-8

WORDCHARS -’'1234567890.






|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

# AFFIXES DU DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “RÉFORME 1990” v6.4.1
# par Olivier R. -- licence MPL 2.0
# Généré le 26-06-2019 à 20:44
# Pour améliorer le dictionnaire, allez sur https://grammalecte.net/



SET UTF-8

WORDCHARS -’'1234567890.

Modified gc_lang/fr/oxt/Dictionnaires/dictionaries/fr-toutesvariantes.aff from [d531e86770] to [f217c056cf].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

# AFFIXES DU DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “TOUTES VARIANTES” v6.4.1
# par Olivier R. -- licence MPL 2.0
# Généré le 15-05-2019 à 08:25
# Pour améliorer le dictionnaire, allez sur https://grammalecte.net/



SET UTF-8

WORDCHARS -’'1234567890.






|







1
2
3
4
5
6
7
8
9
10
11
12
13
14
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

# AFFIXES DU DICTIONNAIRE ORTHOGRAPHIQUE FRANÇAIS “TOUTES VARIANTES” v6.4.1
# par Olivier R. -- licence MPL 2.0
# Généré le 26-06-2019 à 20:44
# Pour améliorer le dictionnaire, allez sur https://grammalecte.net/



SET UTF-8

WORDCHARS -’'1234567890.