48namespace LinguisticProcessing {
62#define RECOGNIZER_VERSION "1.30"
63#define RECOGNIZER_DEBUG_VERSION ".debug"
69m_constraintFunctionMap(),
70m_entityGroupMapping(),
82 LDEBUG <<
"AutomatonReader::readRecognizer" << filename;
84 if (! filename.empty() &&
85 filename[filename.size()-1] ==
'/') {
88 oss <<
"Cannot open [" << filename
89 <<
"] ; it is a directory";
93 ifstream file(filename.c_str(), std::ios::in | std::ios::binary);
94 if (!(file.is_open() && file.good()) ) {
97 oss <<
"Cannot open file [" << filename <<
"]";
104 catch (std::exception& ) {
106 LERROR <<
"failed reading file: " << filename;
117 LDEBUG <<
"AutomatonReader::readRecognizer";
127 for (uint64_t i(0); i<nrules; i++)
136 for (uint64_t i(0); i<n; i++)
140 if (nRulesTransition)
144 reco.
m_rules[i].second.reserve(nRulesTransition);
145 for (uint64_t j(1); j<nRulesTransition; j++)
163 if (deb!=string::npos) {
165 version=string(version,0,deb);
171 oss <<
"incompatible version of binary rules format: "
172 << version <<
", current version is "
175 throw runtime_error(oss.str());
179 std::string language;
182 MediaId lang=
static_cast<MediaId
>(0);
184 if (!language.empty())
216readRule(std::ifstream& file, MediaId language)
243 file.read((
char *) &(rule->
m_contextual),
sizeof(
bool));
244 file.read((
char *) &(rule->
m_negative),
sizeof(
bool));
250 for (uint64_t i(0); i<nbActions; i++) {
256 for (uint64_t i(0); i<nbActionsWithOneArgument; i++) {
263 file.read((
char*) &(rule->
m_weight),
sizeof(
double));
278 file.read((
char*) &(a.m_deterministic),
sizeof(
bool));
281 a.m_finalStates = vector<bool>(nbStates,
false);
284 for (uint64_t i(0); i<nbFinals; i++) {
286 a.m_finalStates[s] =
true;
289 for (uint64_t i(0); i<nbStates; i++) {
290 Tstate lastStateAdded=a.addState();
294 a.m_transitions[lastStateAdded].reserve(nbTrans);
295 for (uint64_t j(0); j<nbTrans; j++) {
300 a.m_transitions[lastStateAdded].push_back(c);
313 c.m_functionAddr= m_constraintFunctionMap[id];
317 file.read((
char *) &(c.m_negative),
sizeof(
bool));
323 m_constraintFunctionMap.clear();
325 for (uint64_t i(0); i!=nbFunctions; i++) {
328 string functionName(
"");
338 getConstraintFunction(functionName,language,complement);
339 m_constraintFunctionMap[n]=functionPtr;
387 file.read((
char *) &h,
sizeof(
unsigned char));
388 file.read((
char *) &p,
sizeof(
unsigned char));
393 TStatus status(c,r,h,p,
false,
false,n,s);
404 std::vector<LimaString> wordVector;
413 vector<TransitionUnit*> tmp(size);
414 for (uint64_t i(0); i<size; i++) {
425 for (uint64_t i(0); i<size; i++) {
437 file.read((
char*)&language,
sizeof(
unsigned char));
464 LERROR <<
"Undefined type of transition: " << codeTrans;
469 bool keep, neg, head;
471 file.read((
char*)&keep,
sizeof(
bool));
473 file.read((
char*)&neg,
sizeof(
bool));
475 file.read((
char*)&head,
sizeof(
bool));
477 file.read((
char*)&len,
sizeof(len));
478 char *buf =
new char [len];
480 t->
setId(std::string(buf,len));
484 for (uint64_t i(0); i<n; i++) {
496m_constraintFunctionMap(),
504 const std::string& filename,
508 ofstream file(filename.c_str(), std::ios::out | std::ios::binary);
512 oss <<
"Cannot open file [" << filename <<
"]";
532 for (uint64_t i(0); i<nRule; i++)
538 uint64_t n(reco.
m_rules.size());
540 for (uint64_t i(0); i<n; i++)
543 uint64_t nRulesTransition(reco.
m_rules[i].second.size());
545 for (uint64_t j(0); j<nRulesTransition; j++)
601 file.write((
char *) &(rule.
m_contextual),
sizeof(
bool));
602 file.write((
char *) &(rule.
m_negative),
sizeof(
bool));
606 uint64_t nbActions=rule.
m_actions.size();
608 for (uint64_t i(0); i<nbActions; i++) {
620 file.write((
char*) &(rule.
m_weight),
sizeof(
double));
632 file.write((
char*) &(a.m_deterministic),
sizeof(
bool));
636 vector<Tstate> finals(a.finalStates());
637 Tstate nbFinals(finals.size());
639 for (uint64_t i(0); i<nbFinals; i++) {
644 for (uint64_t i(0); i<a.m_numberStates; i++) {
646 Tstate nbTrans(a.m_transitions[i].size());
650 for (uint64_t j(0); j<nbTrans; j++) {
653 Tstate state(a.m_transitions[i][j].nextState());
719 file.write((
char *) &h,
sizeof(
unsigned char));
720 file.write((
char *) &p,
sizeof(
unsigned char));
729 vector<TransitionUnit*>::const_iterator
732 for (; it!=it_end; it++) {
739 const std::set<Tword>& words=t->
getWords();
741 set<Tword>::const_iterator
744 for (;w!=w_end; w++) {
753 file.write((
char*) &lang,
sizeof(
unsigned char));
775 LERROR <<
"Undefined type of transition: " << type;
780 bool keep=transition->
keep();
781 bool negative=transition->
negative();
782 bool head=transition->
head();
783 std::string
id = transition->
getId();
784 file.write((
char *) &keep,
sizeof(
bool));
785 file.write((
char *) &negative,
sizeof(
bool));
786 file.write((
char *) &head,
sizeof(
bool));
788 std::string(
id.c_str(),len);
790 LOGINIT(
"Automaton::Compiler");
791 LDEBUG <<
"Transition Writer: write id = " << id;
793 file.write((
char *) &len,
sizeof(len));
794 file.write((
char *)
id.c_str(), len);
797 for (uint64_t i(0); i<n; i++) {
811 file.write((
char *) &(c.m_negative),
sizeof(
bool));
817 const std::multimap<std::string,ConstraintFunction*>&
820 getRegisteredFunctions();
822 std::multimap<std::string,ConstraintFunction*>::
824 c=registered.begin(),
825 c_end=registered.end();
827 uint64_t nbFunctions=registered.size();
830 for (; c!=c_end; c++) {
838 m_constraintFunctionMap[(*c).second]=n;
#define RECOGNIZER_VERSION
#define RECOGNIZER_DEBUG_VERSION
Provide function to read write and check a property.
static std::ostream & encodeToBinary(std::ostream &os, const LinguisticCode &value)
static LinguisticCode decodeFromBinary(std::istream &is)
std::vector< TransitionUnit * > & getTransitions()
void readRecognizer(const std::string &filename, Recognizer &reco)
Rule * readRule(std::ifstream &file, MediaId language)
MediaId readHeader(std::ifstream &file)
void readConstraint(std::ifstream &file, Constraint &c)
void readRegisteredConstraints(std::ifstream &file, MediaId language)
TransitionUnit * readTransitionUnit(std::ifstream &file, MediaId language)
void readAutomaton(std::ifstream &file, Automaton &a, MediaId language)
void writeRegisteredConstraints(std::ofstream &file)
void writeRule(std::ofstream &file, const Rule &rule, MediaId language)
void writeConstraint(std::ofstream &file, const Constraint &c)
void writeTransitionUnit(std::ofstream &file, TransitionUnit *transition, MediaId language)
void writeAutomaton(std::ofstream &file, const Automaton &automaton, MediaId language)
void writeRecognizer(const Recognizer &reco, const std::string &filename, MediaId language, bool debug=false)
void writeHeader(std::ofstream &file, MediaId lang)
␈rief A class for the description of automata
const LimaString & getDeaccentuatedForm() const
MediaId getLanguage() const
Common::MediaticData::EntityGroupId entityGroupId() const
Common::MediaticData::EntityType entityType() const
const std::set< LimaString > & wordSet() const
Tpos partOfSpeech() const
␈rief a class for the definition of a complete recognizer
void initializeSearchStructure()
std::vector< TriggerRule > m_rules
uint64_t findRuleIndex(Rule *) const
bool m_hasLeftRightConstraint
uint64_t m_numberOfConstraints
std::vector< Constraint > m_actions
LinguisticCode getLinguisticProperties() const
LimaString m_normalizedForm
void setType(const Common::MediaticData::EntityType &)
void setRuleId(const std::string &ruleId)
void setLinguisticProperties(const LinguisticCode &)
TransitionUnit * m_trigger
std::vector< std::pair< LimaString, Constraint > > m_actionsWithOneArgument
Common::MediaticData::EntityType getType() const
const std::set< Tword > & getWords() const
const LinguisticAnalysisStructure::TStatus & status() const
uint64_t numberOfConstraints() const
void setNegative(const bool)
const Constraint & constraint(const uint64_t) const
const std::string & getId() const
virtual TypeTransition type() const =0
void setId(const std::string &id)
void addConstraint(const Constraint &)
void setNextState(Tstate)
void setTransitionUnit(TransitionUnit *)
NumericType getNumeric() const
StatusType getStatus() const
AlphaCapitalType getAlphaCapital() const
bool isAlphaPossessive() const
void setDefaultKey(const Lima::LimaString &defaultKey)
bool isAlphaHyphen() const
AlphaRomanType getAlphaRoman() const
const Lima::LimaString & defaultKey() const
static const MediaticData & single()
const singleton accessor
static MediaticData & changeable()
singleton accessor
void writeUTF8StringField(std::ostream &file, const Lima::LimaString &s)
Binary write a a LimaString in a file as an utf8 string.
uint8_t readOneByteInt(std::istream &file)
read a integer coded on one byte in a file
uint64_t readCodedInt(std::istream &file)
read a integer coded in variable-byte format in a file
void readStringField(istream &file, string &s)
void writeOneByteInt(std::ostream &file, const uint8_t number)
write a integer coded on one byte format in a file
void writeStringField(ostream &file, const string &s)
void readUTF8StringField(std::istream &file, Lima::LimaString &s)
Binary read an utf8 string from a file and store it in a LimaString.
void writeCodedInt(std::ostream &file, const uint64_t number)
write a integer coded in variable-byte format in a file
void writeTpos(std::ofstream &file, const Tpos &p)
void readTword(std::ifstream &file, Tword &s, FsaStringsPool &sp)
void readTpos(std::ifstream &file, Tpos &p)
void writeTstate(std::ofstream &file, const Tstate s)
void writeTypeTransition(std::ofstream &file, const TypeTransition t)
void readWordVector(std::ifstream &file, std::vector< LimaString > &wordVector)
void writeTword(std::ofstream &file, const Tword &s, const FsaStringsPool &sp)
void writeWordSet(std::ofstream &file, const std::set< LimaString > &wordSet)
Tstate readTstate(std::ifstream &file)
TypeTransition readTypeTransition(std::ifstream &file)
std::vector< Rule * > SetOfRules
the SetOfRules type is defined as a vector of pointers on Rule