cld3 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +18 -0
  3. data/LICENSE +204 -0
  4. data/LICENSE_CLD3 +203 -0
  5. data/README.md +22 -0
  6. data/cld3.gemspec +35 -0
  7. data/ext/cld3/base.cc +36 -0
  8. data/ext/cld3/base.h +106 -0
  9. data/ext/cld3/casts.h +98 -0
  10. data/ext/cld3/embedding_feature_extractor.cc +51 -0
  11. data/ext/cld3/embedding_feature_extractor.h +182 -0
  12. data/ext/cld3/embedding_network.cc +196 -0
  13. data/ext/cld3/embedding_network.h +186 -0
  14. data/ext/cld3/embedding_network_params.h +285 -0
  15. data/ext/cld3/extconf.rb +49 -0
  16. data/ext/cld3/feature_extractor.cc +137 -0
  17. data/ext/cld3/feature_extractor.h +633 -0
  18. data/ext/cld3/feature_extractor.proto +50 -0
  19. data/ext/cld3/feature_types.cc +72 -0
  20. data/ext/cld3/feature_types.h +158 -0
  21. data/ext/cld3/fixunicodevalue.cc +55 -0
  22. data/ext/cld3/fixunicodevalue.h +69 -0
  23. data/ext/cld3/float16.h +58 -0
  24. data/ext/cld3/fml_parser.cc +308 -0
  25. data/ext/cld3/fml_parser.h +123 -0
  26. data/ext/cld3/generated_entities.cc +296 -0
  27. data/ext/cld3/generated_ulscript.cc +678 -0
  28. data/ext/cld3/generated_ulscript.h +142 -0
  29. data/ext/cld3/getonescriptspan.cc +1109 -0
  30. data/ext/cld3/getonescriptspan.h +124 -0
  31. data/ext/cld3/integral_types.h +37 -0
  32. data/ext/cld3/lang_id_nn_params.cc +57449 -0
  33. data/ext/cld3/lang_id_nn_params.h +178 -0
  34. data/ext/cld3/language_identifier_features.cc +165 -0
  35. data/ext/cld3/language_identifier_features.h +116 -0
  36. data/ext/cld3/nnet_language_identifier.cc +380 -0
  37. data/ext/cld3/nnet_language_identifier.h +175 -0
  38. data/ext/cld3/nnet_language_identifier_c.cc +72 -0
  39. data/ext/cld3/offsetmap.cc +478 -0
  40. data/ext/cld3/offsetmap.h +168 -0
  41. data/ext/cld3/port.h +143 -0
  42. data/ext/cld3/registry.cc +28 -0
  43. data/ext/cld3/registry.h +242 -0
  44. data/ext/cld3/relevant_script_feature.cc +89 -0
  45. data/ext/cld3/relevant_script_feature.h +49 -0
  46. data/ext/cld3/script_detector.h +156 -0
  47. data/ext/cld3/sentence.proto +77 -0
  48. data/ext/cld3/sentence_features.cc +29 -0
  49. data/ext/cld3/sentence_features.h +35 -0
  50. data/ext/cld3/simple_adder.h +72 -0
  51. data/ext/cld3/stringpiece.h +81 -0
  52. data/ext/cld3/task_context.cc +161 -0
  53. data/ext/cld3/task_context.h +81 -0
  54. data/ext/cld3/task_context_params.cc +74 -0
  55. data/ext/cld3/task_context_params.h +54 -0
  56. data/ext/cld3/task_spec.proto +98 -0
  57. data/ext/cld3/text_processing.cc +245 -0
  58. data/ext/cld3/text_processing.h +30 -0
  59. data/ext/cld3/unicodetext.cc +96 -0
  60. data/ext/cld3/unicodetext.h +144 -0
  61. data/ext/cld3/utf8acceptinterchange.h +486 -0
  62. data/ext/cld3/utf8prop_lettermarkscriptnum.h +1631 -0
  63. data/ext/cld3/utf8repl_lettermarklower.h +758 -0
  64. data/ext/cld3/utf8scannot_lettermarkspecial.h +1455 -0
  65. data/ext/cld3/utf8statetable.cc +1344 -0
  66. data/ext/cld3/utf8statetable.h +285 -0
  67. data/ext/cld3/utils.cc +241 -0
  68. data/ext/cld3/utils.h +144 -0
  69. data/ext/cld3/workspace.cc +64 -0
  70. data/ext/cld3/workspace.h +177 -0
  71. data/lib/cld3.rb +99 -0
  72. metadata +158 -0
@@ -0,0 +1,308 @@
1
+ /* Copyright 2016 Google Inc. All Rights Reserved.
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
14
+ ==============================================================================*/
15
+
16
+ #include "fml_parser.h"
17
+
18
+ #include <ctype.h>
19
+ #include <string>
20
+
21
+ #include "base.h"
22
+ #include "utils.h"
23
+
24
+ namespace chrome_lang_id {
25
+
26
+ namespace {
27
+
28
+ inline bool IsValidCharAtStartOfIdentifier(char c) {
29
+ return isalpha(c) || (c == '_') || (c == '/');
30
+ }
31
+
32
+ // Returns true iff character c can appear inside an identifier.
33
+ inline bool IsValidCharInsideIdentifier(char c) {
34
+ return isalnum(c) || (c == '_') || (c == '-') || (c == '/');
35
+ }
36
+
37
+ // Returns true iff character c can appear at the beginning of a number.
38
+ inline bool IsValidCharAtStartOfNumber(char c) {
39
+ return isdigit(c) || (c == '+') || (c == '-');
40
+ }
41
+
42
+ // Returns true iff character c can appear inside a number.
43
+ inline bool IsValidCharInsideNumber(char c) { return isdigit(c) || (c == '.'); }
44
+
45
+ } // namespace
46
+
47
+ FMLParser::FMLParser() {}
48
+ FMLParser::~FMLParser() {}
49
+
50
+ void FMLParser::Initialize(const string &source) {
51
+ // Initialize parser state.
52
+ source_ = source;
53
+ current_ = source_.begin();
54
+ item_start_ = line_start_ = current_;
55
+ line_number_ = item_line_number_ = 1;
56
+
57
+ // Read first input item.
58
+ NextItem();
59
+ }
60
+
61
+ void FMLParser::Next() {
62
+ // Move to the next input character. If we are at a line break update line
63
+ // number and line start position.
64
+ if (CurrentChar() == '\n') {
65
+ ++line_number_;
66
+ ++current_;
67
+ line_start_ = current_;
68
+ } else {
69
+ ++current_;
70
+ }
71
+ }
72
+
73
+ void FMLParser::NextItem() {
74
+ // Skip white space and comments.
75
+ while (!eos()) {
76
+ if (CurrentChar() == '#') {
77
+ // Skip comment.
78
+ while (!eos() && CurrentChar() != '\n') Next();
79
+ } else if (isspace(CurrentChar())) {
80
+ // Skip whitespace.
81
+ while (!eos() && isspace(CurrentChar())) Next();
82
+ } else {
83
+ break;
84
+ }
85
+ }
86
+
87
+ // Record start position for next item.
88
+ item_start_ = current_;
89
+ item_line_number_ = line_number_;
90
+
91
+ // Check for end of input.
92
+ if (eos()) {
93
+ item_type_ = END;
94
+ return;
95
+ }
96
+
97
+ // Parse number.
98
+ if (IsValidCharAtStartOfNumber(CurrentChar())) {
99
+ string::iterator start = current_;
100
+ Next();
101
+ while (!eos() && IsValidCharInsideNumber(CurrentChar())) Next();
102
+ item_text_.assign(start, current_);
103
+ item_type_ = NUMBER;
104
+ return;
105
+ }
106
+
107
+ // Parse string.
108
+ if (CurrentChar() == '"') {
109
+ Next();
110
+ string::iterator start = current_;
111
+ while (CurrentChar() != '"') {
112
+ CLD3_DCHECK(!eos());
113
+ Next();
114
+ }
115
+ item_text_.assign(start, current_);
116
+ item_type_ = STRING;
117
+ Next();
118
+ return;
119
+ }
120
+
121
+ // Parse identifier name.
122
+ if (IsValidCharAtStartOfIdentifier(CurrentChar())) {
123
+ string::iterator start = current_;
124
+ while (!eos() && IsValidCharInsideIdentifier(CurrentChar())) {
125
+ Next();
126
+ }
127
+ item_text_.assign(start, current_);
128
+ item_type_ = NAME;
129
+ return;
130
+ }
131
+
132
+ // Single character item.
133
+ item_type_ = CurrentChar();
134
+ Next();
135
+ }
136
+
137
+ void FMLParser::Parse(const string &source,
138
+ FeatureExtractorDescriptor *result) {
139
+ // Initialize parser.
140
+ Initialize(source);
141
+
142
+ while (item_type_ != END) {
143
+ // Parse either a parameter name or a feature.
144
+ CLD3_DCHECK(item_type_ == NAME);
145
+ string name = item_text_;
146
+ NextItem();
147
+
148
+ // Feature expected.
149
+ CLD3_DCHECK(static_cast<char>(item_type_) != '=');
150
+
151
+ // Parse feature.
152
+ FeatureFunctionDescriptor *descriptor = result->add_feature();
153
+ descriptor->set_type(name);
154
+ ParseFeature(descriptor);
155
+ }
156
+ }
157
+
158
+ void FMLParser::ParseFeature(FeatureFunctionDescriptor *result) {
159
+ // Parse argument and parameters.
160
+ if (item_type_ == '(') {
161
+ NextItem();
162
+ ParseParameter(result);
163
+ while (item_type_ == ',') {
164
+ NextItem();
165
+ ParseParameter(result);
166
+ }
167
+
168
+ CLD3_DCHECK(item_type_ == ')');
169
+ NextItem();
170
+ }
171
+
172
+ // Parse feature name.
173
+ if (item_type_ == ':') {
174
+ NextItem();
175
+
176
+ // Feature name expected.
177
+ CLD3_DCHECK((item_type_ == NAME) || (item_type_ == STRING));
178
+ string name = item_text_;
179
+ NextItem();
180
+
181
+ // Set feature name.
182
+ result->set_name(name);
183
+ }
184
+
185
+ // Parse sub-features.
186
+ if (item_type_ == '.') {
187
+ // Parse dotted sub-feature.
188
+ NextItem();
189
+ CLD3_DCHECK(item_type_ == NAME);
190
+ string type = item_text_;
191
+ NextItem();
192
+
193
+ // Parse sub-feature.
194
+ FeatureFunctionDescriptor *subfeature = result->add_feature();
195
+ subfeature->set_type(type);
196
+ ParseFeature(subfeature);
197
+ } else if (item_type_ == '{') {
198
+ // Parse sub-feature block.
199
+ NextItem();
200
+ while (item_type_ != '}') {
201
+ CLD3_DCHECK(item_type_ == NAME);
202
+ string type = item_text_;
203
+ NextItem();
204
+
205
+ // Parse sub-feature.
206
+ FeatureFunctionDescriptor *subfeature = result->add_feature();
207
+ subfeature->set_type(type);
208
+ ParseFeature(subfeature);
209
+ }
210
+ NextItem();
211
+ }
212
+ }
213
+
214
+ void FMLParser::ParseParameter(FeatureFunctionDescriptor *result) {
215
+ CLD3_DCHECK((item_type_ == NUMBER) || (item_type_ == NAME));
216
+ if (item_type_ == NUMBER) {
217
+ int argument = utils::ParseUsing<int>(item_text_, utils::ParseInt32);
218
+ NextItem();
219
+
220
+ // Set default argument for feature.
221
+ result->set_argument(argument);
222
+ } else { // item_type_ == NAME
223
+ string name = item_text_;
224
+ NextItem();
225
+ CLD3_DCHECK(item_type_ == '=');
226
+ NextItem();
227
+
228
+ // Parameter value expected.
229
+ CLD3_DCHECK(item_type_ < END);
230
+ string value = item_text_;
231
+ NextItem();
232
+
233
+ // Add parameter to feature.
234
+ Parameter *parameter;
235
+ parameter = result->add_parameter();
236
+ parameter->set_name(name);
237
+ parameter->set_value(value);
238
+ }
239
+ }
240
+
241
+ void ToFMLFunction(const FeatureFunctionDescriptor &function, string *output) {
242
+ output->append(function.type());
243
+ if (function.argument() != 0 || function.parameter_size() > 0) {
244
+ output->append("(");
245
+ bool first = true;
246
+ if (function.argument() != 0) {
247
+ output->append(Int64ToString(function.argument()));
248
+ first = false;
249
+ }
250
+ for (int i = 0; i < function.parameter_size(); ++i) {
251
+ if (!first) output->append(",");
252
+ output->append(function.parameter(i).name());
253
+ output->append("=");
254
+ output->append("\"");
255
+ output->append(function.parameter(i).value());
256
+ output->append("\"");
257
+ first = false;
258
+ }
259
+ output->append(")");
260
+ }
261
+ }
262
+
263
+ void ToFML(const FeatureFunctionDescriptor &function, string *output) {
264
+ ToFMLFunction(function, output);
265
+ if (function.feature_size() == 1) {
266
+ output->append(".");
267
+ ToFML(function.feature(0), output);
268
+ } else if (function.feature_size() > 1) {
269
+ output->append(" { ");
270
+ for (int i = 0; i < function.feature_size(); ++i) {
271
+ if (i > 0) output->append(" ");
272
+ ToFML(function.feature(i), output);
273
+ }
274
+ output->append(" } ");
275
+ }
276
+ }
277
+
278
+ void ToFML(const FeatureExtractorDescriptor &extractor, string *output) {
279
+ for (int i = 0; i < extractor.feature_size(); ++i) {
280
+ ToFML(extractor.feature(i), output);
281
+ output->append("\n");
282
+ }
283
+ }
284
+
285
+ string AsFML(const FeatureFunctionDescriptor &function) {
286
+ string str;
287
+ ToFML(function, &str);
288
+ return str;
289
+ }
290
+
291
+ string AsFML(const FeatureExtractorDescriptor &extractor) {
292
+ string str;
293
+ ToFML(extractor, &str);
294
+ return str;
295
+ }
296
+
297
+ void StripFML(string *fml_string) {
298
+ auto it = fml_string->begin();
299
+ while (it != fml_string->end()) {
300
+ if (*it == '"') {
301
+ it = fml_string->erase(it);
302
+ } else {
303
+ ++it;
304
+ }
305
+ }
306
+ }
307
+
308
+ } // namespace chrome_lang_id
@@ -0,0 +1,123 @@
1
+ /* Copyright 2016 Google Inc. All Rights Reserved.
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
14
+ ==============================================================================*/
15
+
16
+ // Feature modeling language (fml) parser.
17
+ //
18
+ // BNF grammar for fml:
19
+ //
20
+ // <feature model> ::= { <feature extractor> }
21
+ //
22
+ // <feature extractor> ::= <extractor spec> |
23
+ // <extractor spec> '.' <feature extractor> |
24
+ // <extractor spec> '{' { <feature extractor> } '}'
25
+ //
26
+ // <extractor spec> ::= <extractor type>
27
+ // [ '(' <parameter list> ')' ]
28
+ // [ ':' <extractor name> ]
29
+ //
30
+ // <parameter list> = ( <parameter> | <argument> ) { ',' <parameter> }
31
+ //
32
+ // <parameter> ::= <parameter name> '=' <parameter value>
33
+ //
34
+ // <extractor type> ::= NAME
35
+ // <extractor name> ::= NAME | STRING
36
+ // <argument> ::= NUMBER
37
+ // <parameter name> ::= NAME
38
+ // <parameter value> ::= NUMBER | STRING | NAME
39
+
40
+ #ifndef FML_PARSER_H_
41
+ #define FML_PARSER_H_
42
+
43
+ #include <string>
44
+
45
+ #include "base.h"
46
+ #include "cld_3/protos/feature_extractor.pb.h"
47
+
48
+ namespace chrome_lang_id {
49
+
50
+ class FMLParser {
51
+ public:
52
+ // Parses fml specification into feature extractor descriptor.
53
+ void Parse(const string &source, FeatureExtractorDescriptor *result);
54
+
55
+ FMLParser();
56
+ ~FMLParser();
57
+
58
+ private:
59
+ // Initializes the parser with the source text.
60
+ void Initialize(const string &source);
61
+
62
+ // Moves to the next input character.
63
+ void Next();
64
+
65
+ // Moves to the next input item.
66
+ void NextItem();
67
+
68
+ // Parses a feature descriptor.
69
+ void ParseFeature(FeatureFunctionDescriptor *result);
70
+
71
+ // Parses a parameter specification.
72
+ void ParseParameter(FeatureFunctionDescriptor *result);
73
+
74
+ // Returns true if end of source input has been reached.
75
+ bool eos() const { return current_ == source_.end(); }
76
+
77
+ // Returns current character. Other methods should access the current
78
+ // character through this method (instead of using *current_ directly): this
79
+ // method performs extra safety checks.
80
+ char CurrentChar() const {
81
+ // CLD3_DCHECK that we are reading from inside the string.
82
+ CLD3_DCHECK(current_ >= source_.begin());
83
+ CLD3_DCHECK(current_ < source_.end());
84
+ return *current_;
85
+ }
86
+
87
+ // Item types.
88
+ enum ItemTypes {
89
+ END = 0,
90
+ NAME = -1,
91
+ NUMBER = -2,
92
+ STRING = -3,
93
+ };
94
+
95
+ // Source text.
96
+ string source_;
97
+
98
+ // Current input position.
99
+ string::iterator current_;
100
+
101
+ // Line number for current input position.
102
+ int line_number_;
103
+
104
+ // Start position for current item.
105
+ string::iterator item_start_;
106
+
107
+ // Start position for current line.
108
+ string::iterator line_start_;
109
+
110
+ // Line number for current item.
111
+ int item_line_number_;
112
+
113
+ // Item type for current item. If this is positive it is interpreted as a
114
+ // character. If it is negative it is interpreted as an item type.
115
+ int item_type_;
116
+
117
+ // Text for current item.
118
+ string item_text_;
119
+ };
120
+
121
+ } // namespace chrome_lang_id
122
+
123
+ #endif // FML_PARSER_H_
@@ -0,0 +1,296 @@
1
+ // Copyright 2013 Google Inc. All Rights Reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ // generated_entities.cc
16
+ // Machine generated. Do Not Edit.
17
+ //
18
+ // Declarations for HTML entities recognized by CLD2
19
+ //
20
+ #include "generated_ulscript.h" // for CharIntPair
21
+
22
+ namespace chrome_lang_id {
23
+ namespace CLD2 {
24
+
25
+ // Alphabetical order for binary search
26
+ extern const int kNameToEntitySize = 265;
27
+ extern const CharIntPair kNameToEntity[kNameToEntitySize] = {
28
+ {"AElig", 198},
29
+ {"AMP", 38},
30
+ {"Aacute", 193},
31
+ {"Acirc", 194},
32
+ {"Agrave", 192},
33
+ {"Alpha", 913},
34
+ {"Aring", 197},
35
+ {"Atilde", 195},
36
+ {"Auml", 196},
37
+ {"Beta", 914},
38
+ {"Ccaron", 268},
39
+ {"Ccedil", 199},
40
+ {"Chi", 935},
41
+ {"Dagger", 8225},
42
+ {"Delta", 916},
43
+ {"ETH", 208},
44
+ {"Eacute", 201},
45
+ {"Ecaron", 282},
46
+ {"Ecirc", 202},
47
+ {"Egrave", 200},
48
+ {"Epsilon", 917},
49
+ {"Eta", 919},
50
+ {"Euml", 203},
51
+ {"GT", 62},
52
+ {"Gamma", 915},
53
+ {"Iacute", 205},
54
+ {"Icirc", 206},
55
+ {"Igrave", 204},
56
+ {"Iota", 921},
57
+ {"Iuml", 207},
58
+ {"Kappa", 922},
59
+ {"LT", 60},
60
+ {"Lambda", 923},
61
+ {"Mu", 924},
62
+ {"Ntilde", 209},
63
+ {"Nu", 925},
64
+ {"OElig", 338},
65
+ {"Oacute", 211},
66
+ {"Ocirc", 212},
67
+ {"Ograve", 210},
68
+ {"Omega", 937},
69
+ {"Omicron", 927},
70
+ {"Oslash", 216},
71
+ {"Otilde", 213},
72
+ {"Ouml", 214},
73
+ {"Phi", 934},
74
+ {"Pi", 928},
75
+ {"Prime", 8243},
76
+ {"Psi", 936},
77
+ {"QUOT", 34},
78
+ {"Rcaron", 344},
79
+ {"Rho", 929},
80
+ {"Scaron", 352},
81
+ {"Sigma", 931},
82
+ {"THORN", 222},
83
+ {"Tau", 932},
84
+ {"Theta", 920},
85
+ {"Uacute", 218},
86
+ {"Ucirc", 219},
87
+ {"Ugrave", 217},
88
+ {"Upsilon", 933},
89
+ {"Uuml", 220},
90
+ {"Xi", 926},
91
+ {"Yacute", 221},
92
+ {"Yuml", 376},
93
+ {"Zeta", 918},
94
+ {"aacute", 225},
95
+ {"acirc", 226},
96
+ {"acute", 180},
97
+ {"aelig", 230},
98
+ {"agrave", 224},
99
+ {"alefsym", 8501},
100
+ {"alpha", 945},
101
+ {"amp", 38},
102
+ {"and", 8743},
103
+ {"ang", 8736},
104
+ {"apos", 39},
105
+ {"aring", 229},
106
+ {"asymp", 8776},
107
+ {"atilde", 227},
108
+ {"auml", 228},
109
+ {"bdquo", 8222},
110
+ {"beta", 946},
111
+ {"brvbar", 166},
112
+ {"bull", 8226},
113
+ {"cap", 8745},
114
+ {"ccaron", 269},
115
+ {"ccedil", 231},
116
+ {"cedil", 184},
117
+ {"cent", 162},
118
+ {"chi", 967},
119
+ {"circ", 710},
120
+ {"clubs", 9827},
121
+ {"cong", 8773},
122
+ {"copy", 169},
123
+ {"crarr", 8629},
124
+ {"cup", 8746},
125
+ {"curren", 164},
126
+ {"dArr", 8659},
127
+ {"dagger", 8224},
128
+ {"darr", 8595},
129
+ {"deg", 176},
130
+ {"delta", 948},
131
+ {"diams", 9830},
132
+ {"divide", 247},
133
+ {"eacute", 233},
134
+ {"ecaron", 283},
135
+ {"ecirc", 234},
136
+ {"egrave", 232},
137
+ {"emdash", 8212},
138
+ {"empty", 8709},
139
+ {"emsp", 8195},
140
+ {"endash", 8211},
141
+ {"ensp", 8194},
142
+ {"epsilon", 949},
143
+ {"equiv", 8801},
144
+ {"eta", 951},
145
+ {"eth", 240},
146
+ {"euml", 235},
147
+ {"euro", 8364},
148
+ {"exist", 8707},
149
+ {"fnof", 402},
150
+ {"forall", 8704},
151
+ {"frac12", 189},
152
+ {"frac14", 188},
153
+ {"frac34", 190},
154
+ {"frasl", 8260},
155
+ {"gamma", 947},
156
+ {"ge", 8805},
157
+ {"gt", 62},
158
+ {"hArr", 8660},
159
+ {"harr", 8596},
160
+ {"hearts", 9829},
161
+ {"hellip", 8230},
162
+ {"iacute", 237},
163
+ {"icirc", 238},
164
+ {"iexcl", 161},
165
+ {"igrave", 236},
166
+ {"image", 8465},
167
+ {"infin", 8734},
168
+ {"int", 8747},
169
+ {"iota", 953},
170
+ {"iquest", 191},
171
+ {"isin", 8712},
172
+ {"iuml", 239},
173
+ {"kappa", 954},
174
+ {"lArr", 8656},
175
+ {"lambda", 955},
176
+ {"lang", 9001},
177
+ {"laquo", 171},
178
+ {"larr", 8592},
179
+ {"lceil", 8968},
180
+ {"ldquo", 8220},
181
+ {"le", 8804},
182
+ {"lfloor", 8970},
183
+ {"lowast", 8727},
184
+ {"loz", 9674},
185
+ {"lrm", 8206},
186
+ {"lsaquo", 8249},
187
+ {"lsquo", 8216},
188
+ {"lt", 60},
189
+ {"macr", 175},
190
+ {"mdash", 8212},
191
+ {"micro", 181},
192
+ {"middot", 183},
193
+ {"minus", 8722},
194
+ {"mu", 956},
195
+ {"nabla", 8711},
196
+ {"nbsp", 160},
197
+ {"ndash", 8211},
198
+ {"ne", 8800},
199
+ {"ni", 8715},
200
+ {"not", 172},
201
+ {"notin", 8713},
202
+ {"nsub", 8836},
203
+ {"ntilde", 241},
204
+ {"nu", 957},
205
+ {"oacute", 243},
206
+ {"ocirc", 244},
207
+ {"oelig", 339},
208
+ {"ograve", 242},
209
+ {"oline", 8254},
210
+ {"omega", 969},
211
+ {"omicron", 959},
212
+ {"oplus", 8853},
213
+ {"or", 8744},
214
+ {"ordf", 170},
215
+ {"ordm", 186},
216
+ {"oslash", 248},
217
+ {"otilde", 245},
218
+ {"otimes", 8855},
219
+ {"ouml", 246},
220
+ {"para", 182},
221
+ {"part", 8706},
222
+ {"permil", 8240},
223
+ {"perp", 8869},
224
+ {"phi", 966},
225
+ {"pi", 960},
226
+ {"piv", 982},
227
+ {"plusmn", 177},
228
+ {"pound", 163},
229
+ {"prime", 8242},
230
+ {"prod", 8719},
231
+ {"prop", 8733},
232
+ {"psi", 968},
233
+ {"quot", 34},
234
+ {"rArr", 8658},
235
+ {"radic", 8730},
236
+ {"rang", 9002},
237
+ {"raquo", 187},
238
+ {"rarr", 8594},
239
+ {"rcaron", 345},
240
+ {"rceil", 8969},
241
+ {"rdquo", 8221},
242
+ {"real", 8476},
243
+ {"reg", 174},
244
+ {"rfloor", 8971},
245
+ {"rho", 961},
246
+ {"rlm", 8207},
247
+ {"rsaquo", 8250},
248
+ {"rsquo", 8217},
249
+ {"sbquo", 8218},
250
+ {"scaron", 353},
251
+ {"sdot", 8901},
252
+ {"sect", 167},
253
+ {"shy", 173},
254
+ {"sigma", 963},
255
+ {"sigmaf", 962},
256
+ {"sim", 8764},
257
+ {"spades", 9824},
258
+ {"sub", 8834},
259
+ {"sube", 8838},
260
+ {"sum", 8721},
261
+ {"sup", 8835},
262
+ {"sup1", 185},
263
+ {"sup2", 178},
264
+ {"sup3", 179},
265
+ {"supe", 8839},
266
+ {"szlig", 223},
267
+ {"tau", 964},
268
+ {"there4", 8756},
269
+ {"theta", 952},
270
+ {"thetasym", 977},
271
+ {"thinsp", 8201},
272
+ {"thorn", 254},
273
+ {"tilde", 732},
274
+ {"times", 215},
275
+ {"trade", 8482},
276
+ {"uArr", 8657},
277
+ {"uacute", 250},
278
+ {"uarr", 8593},
279
+ {"ucirc", 251},
280
+ {"ugrave", 249},
281
+ {"uml", 168},
282
+ {"upsih", 978},
283
+ {"upsilon", 965},
284
+ {"uuml", 252},
285
+ {"weierp", 8472},
286
+ {"xi", 958},
287
+ {"yacute", 253},
288
+ {"yen", 165},
289
+ {"yuml", 255},
290
+ {"zeta", 950},
291
+ {"zwj", 8205},
292
+ {"zwnj", 8204},
293
+ };
294
+
295
+ } // namespace CLD2
296
+ } // namespace chrome_lang_id