Thao Pham commited on
Commit
28fd7c1
·
1 Parent(s): f32d53f

Initial commit

Browse files
.gitignore ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ venv
2
+ pretrained-models
3
+ test_file.txt
.idea/.gitignore ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ # Default ignored files
2
+ /shelf/
3
+ /workspace.xml
.idea/inspectionProfiles/Project_Default.xml ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <component name="InspectionProjectProfileManager">
2
+ <profile version="1.0">
3
+ <option name="myName" value="Project Default" />
4
+ <inspection_tool class="PyChainedComparisonsInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
5
+ <option name="ignoreConstantInTheMiddle" value="true" />
6
+ </inspection_tool>
7
+ <inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
8
+ <option name="ignoredPackages">
9
+ <value>
10
+ <list size="13">
11
+ <item index="0" class="java.lang.String" itemvalue="scikit-image" />
12
+ <item index="1" class="java.lang.String" itemvalue="scipy" />
13
+ <item index="2" class="java.lang.String" itemvalue="scikit-learn" />
14
+ <item index="3" class="java.lang.String" itemvalue="PyYAML" />
15
+ <item index="4" class="java.lang.String" itemvalue="python-dateutil" />
16
+ <item index="5" class="java.lang.String" itemvalue="torch" />
17
+ <item index="6" class="java.lang.String" itemvalue="numpy" />
18
+ <item index="7" class="java.lang.String" itemvalue="torchvision" />
19
+ <item index="8" class="java.lang.String" itemvalue="pandas" />
20
+ <item index="9" class="java.lang.String" itemvalue="tqdm" />
21
+ <item index="10" class="java.lang.String" itemvalue="imageio" />
22
+ <item index="11" class="java.lang.String" itemvalue="matplotlib" />
23
+ <item index="12" class="java.lang.String" itemvalue="pytz" />
24
+ </list>
25
+ </value>
26
+ </option>
27
+ </inspection_tool>
28
+ <inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
29
+ <option name="ignoredErrors">
30
+ <list>
31
+ <option value="N803" />
32
+ <option value="N806" />
33
+ <option value="N802" />
34
+ </list>
35
+ </option>
36
+ </inspection_tool>
37
+ </profile>
38
+ </component>
.idea/inspectionProfiles/profiles_settings.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ <component name="InspectionProjectProfileManager">
2
+ <settings>
3
+ <option name="USE_PROJECT_PROFILE" value="false" />
4
+ <version value="1.0" />
5
+ </settings>
6
+ </component>
.idea/keyword-extraction-viet.iml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="PYTHON_MODULE" version="4">
3
+ <component name="NewModuleRootManager">
4
+ <content url="file://$MODULE_DIR$">
5
+ <excludeFolder url="file://$MODULE_DIR$/venv" />
6
+ </content>
7
+ <orderEntry type="inheritedJdk" />
8
+ <orderEntry type="sourceFolder" forTests="false" />
9
+ </component>
10
+ </module>
.idea/misc.xml ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11 (keyword-extraction-viet)" project-jdk-type="Python SDK" />
4
+ </project>
.idea/modules.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectModuleManager">
4
+ <modules>
5
+ <module fileurl="file://$PROJECT_DIR$/.idea/keyword-extraction-viet.iml" filepath="$PROJECT_DIR$/.idea/keyword-extraction-viet.iml" />
6
+ </modules>
7
+ </component>
8
+ </project>
.idea/vcs.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="$PROJECT_DIR$" vcs="Git" />
5
+ </component>
6
+ </project>
keyword_extraction.py ADDED
@@ -0,0 +1,350 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from string import punctuation
2
+ import numpy as np
3
+ import torch
4
+ from sklearn.cluster import KMeans
5
+ from named_entities import get_named_entities
6
+
7
+ punctuation = [c for c in punctuation if c != "_"]
8
+ punctuation += ["“", "–", ",", "…", "”", "–"]
9
+
10
+ # with open('/Users/thaopham/bao-lao-dong-data/utils/vietnamese-stopwords-dash.txt') as f:
11
+ # stopwords = [w.strip() for w in f.readlines()]
12
+
13
+ ethnicity_dict_map = {"H'Mông": "HMông",
14
+ "H'mông": "HMông",
15
+ "H’mông": "HMông",
16
+ "H’Mông": "HMông",
17
+ "H’MÔNG": "HMông",
18
+ "M'Nông": "MNông",
19
+ "M'nông": "MNông",
20
+ "M'NÔNG": "MNông",
21
+ "M’Nông": "MNông",
22
+ "M’NÔNG": "MNông",
23
+ "K’Ho": "KHo",
24
+ "K’Mẻo": "KMẻo"}
25
+
26
+
27
+ def sub_sentence(sentence):
28
+ sent = []
29
+
30
+ start_index = 0
31
+ while start_index < len(sentence):
32
+ idx_list = []
33
+ for p in punctuation:
34
+ idx = sentence.find(p, start_index)
35
+ if idx != -1:
36
+ idx_list.append(idx)
37
+
38
+ if len(idx_list) == 0:
39
+ sent.append(sentence[start_index:].strip())
40
+ break
41
+
42
+ end_index = min(idx_list)
43
+
44
+ subsent = sentence[start_index:end_index].strip()
45
+ if len(subsent) > 0:
46
+ sent.append(subsent)
47
+
48
+ start_index = end_index + 1
49
+
50
+ return sent
51
+
52
+
53
+ def check_for_stopwords(ngram, stopwords_ls):
54
+ for ngram_elem in ngram.split():
55
+ for w in stopwords_ls:
56
+ if ngram_elem == w: # or ngram_elem.lower() == w:
57
+ return True
58
+ return False
59
+
60
+
61
+ def compute_ngram_list(segmentised_doc, ngram_n, stopwords_ls, subsentences=True):
62
+ if subsentences:
63
+ output_sub_sentences = []
64
+ for sentence in segmentised_doc:
65
+ output_sub_sentences += sub_sentence(sentence)
66
+ else:
67
+ output_sub_sentences = segmentised_doc
68
+
69
+ ngram_list = []
70
+ for sentence in output_sub_sentences:
71
+ sent = sentence.split()
72
+ for i in range(len(sent) - (ngram_n) + 1):
73
+ ngram = ' '.join(sent[i:i + (ngram_n)])
74
+ if ngram not in ngram_list and not check_for_stopwords(ngram, stopwords_ls):
75
+ ngram_list.append(ngram)
76
+
77
+ final_ngram_list = []
78
+ for ngram in ngram_list:
79
+ contains_number = False
80
+ for char in ngram:
81
+ if char.isnumeric():
82
+ contains_number = True
83
+ break
84
+ if not contains_number:
85
+ final_ngram_list.append(ngram)
86
+
87
+ return final_ngram_list
88
+
89
+
90
+ def cosine_similarity(a, b):
91
+ return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
92
+
93
+
94
+ def get_doc_embeddings(segmentised_doc, tokenizer, phobert, stopwords):
95
+ doc_embedding = torch.zeros(size=(len(segmentised_doc), 768))
96
+
97
+ for i, sentence in enumerate(segmentised_doc):
98
+ sent_removed_stopwords = ' '.join([word for word in sentence.split() if word not in stopwords])
99
+
100
+ sentence_embedding = tokenizer.encode(sent_removed_stopwords)
101
+ input_ids = torch.tensor([sentence_embedding])
102
+ with torch.no_grad():
103
+ features = phobert(input_ids)
104
+
105
+ if i == 0:
106
+ doc_embedding[i, :] = 2 * features.pooler_output.flatten()
107
+ else:
108
+ doc_embedding[i, :] = features.pooler_output.flatten()
109
+
110
+ return torch.mean(doc_embedding, axis=0)
111
+
112
+
113
+ def get_segmentised_doc(nlp, rdrsegmenter, title, doc):
114
+ for i, j in ethnicity_dict_map.items():
115
+ if title is not None:
116
+ title = title.replace(i, j)
117
+ doc = doc.replace(i, j)
118
+
119
+ print(title)
120
+ # print(doc)
121
+ segmentised_doc = rdrsegmenter.word_segment(doc)
122
+
123
+ if title is not None:
124
+ segmentised_doc = rdrsegmenter.word_segment(title) + rdrsegmenter.word_segment(doc)
125
+ print(segmentised_doc)
126
+ ne_ls = set(get_named_entities(nlp, doc))
127
+ print(sorted(ne_ls))
128
+
129
+ segmentised_doc_ne = []
130
+ for sent in segmentised_doc:
131
+ for ne in ne_ls:
132
+ sent = sent.replace(ne, '_'.join(ne.split()))
133
+ segmentised_doc_ne.append(sent)
134
+ return ne_ls, segmentised_doc_ne
135
+
136
+
137
+ def compute_ngram_embeddings(tokenizer, phobert, ngram_list):
138
+ ngram_embeddings = {}
139
+
140
+ for ngram in ngram_list:
141
+ ngram_copy = ngram
142
+ if ngram.isupper():
143
+ ngram_copy = ngram.lower()
144
+ word_embedding = tokenizer.encode(ngram_copy)
145
+ input_ids = torch.tensor([word_embedding])
146
+ with torch.no_grad():
147
+ word_features = phobert(input_ids)
148
+
149
+ ngram_embeddings[ngram] = word_features.pooler_output
150
+ return ngram_embeddings
151
+
152
+
153
+ def normalised_cosine_similarity(ngram_embedding, document_embedding):
154
+ similarity_score = cosine_similarity(ngram_embedding, document_embedding)
155
+ magnitude_ngram = np.linalg.norm(ngram_embedding)
156
+ magnitude_doc = np.linalg.norm(document_embedding)
157
+ return similarity_score / np.sqrt(magnitude_ngram * magnitude_doc)
158
+
159
+
160
+ def compute_ngram_similarity(ngram_list, ngram_embeddings, doc_embedding):
161
+ ngram_similarity_dict = {}
162
+
163
+ for ngram in ngram_list:
164
+ similarity_score = cosine_similarity(ngram_embeddings[ngram], doc_embedding.T).flatten()[0]
165
+ # similarity_score = normalised_cosine_similarity(ngram_embeddings[ngram], doc_embedding.T).flatten()[0]
166
+ ngram_similarity_dict[ngram] = similarity_score
167
+
168
+ return ngram_similarity_dict
169
+
170
+
171
+ # def compute_ngram_similarity(ngram_list, ngram_embeddings, doc_embedding):
172
+ # ngram_similarity_dict = {}
173
+ #
174
+ # for ngram in ngram_list:
175
+ # score = [cosine_similarity(ngram_embeddings[ngram], doc_embedding.T).flatten()[0]]
176
+ # for w in ngram.split():
177
+ # similarity_score = cosine_similarity(ngram_embeddings[w], doc_embedding.T).flatten()[0]
178
+ # score.append(similarity_score)
179
+ # ngram_similarity_dict[ngram] = np.mean(score)
180
+ #
181
+ # return ngram_similarity_dict
182
+
183
+
184
+ def diversify_result(ngram_result, ngram_embeddings, top_n=5):
185
+ best_ngrams = sorted(ngram_result, key=ngram_result.get, reverse=True)[:top_n * 4]
186
+ best_ngram_embeddings = np.array([ngram_embeddings[ngram] for ngram in best_ngrams]).squeeze()
187
+ vote = {}
188
+
189
+ for niter in range(100):
190
+ kmeans = KMeans(n_clusters=top_n, init='k-means++', random_state=niter * 2, n_init="auto").fit(
191
+ best_ngram_embeddings)
192
+ kmeans_result = kmeans.labels_
193
+
194
+ res = {}
195
+ for i in range(len(kmeans_result)):
196
+ if kmeans_result[i] not in res:
197
+ res[kmeans_result[i]] = []
198
+ res[kmeans_result[i]].append((best_ngrams[i], ngram_result[best_ngrams[i]]))
199
+
200
+ final_result = [res[k][0] for k in res]
201
+ for keyword in final_result:
202
+ if keyword not in vote:
203
+ vote[keyword] = 0
204
+ vote[keyword] += 1
205
+
206
+ diversify_result_ls = sorted(vote, key=vote.get, reverse=True)
207
+
208
+ return diversify_result_ls[:top_n]
209
+
210
+
211
+ def mmr(ngram_result, ngram_embeddings, lambda_=0.7, top_n=5):
212
+ ngram_result = {key: ngram_result[key] for key in
213
+ sorted(ngram_result, key=ngram_result.get, reverse=True)[:top_n * 4]}
214
+
215
+ mmr_result = {}
216
+ for ngram1 in ngram_result:
217
+ similary_score_to_doc = ngram_result[ngram1]
218
+ max_sim = -1
219
+ # most_similar_ngram = None
220
+ for ngram2 in ngram_result:
221
+ if ngram2 != ngram1:
222
+ similarity_score_to_ngram = \
223
+ cosine_similarity(ngram_embeddings[ngram1], ngram_embeddings[ngram2].T).flatten()[0]
224
+
225
+ if ngram2.lower() == ngram1.lower():
226
+ similarity_score_to_ngram = 1
227
+
228
+ if similarity_score_to_ngram > max_sim:
229
+ max_sim = similarity_score_to_ngram
230
+ # most_similar_ngram = ngram2
231
+ # print(ngram1, most_similar_ngram, max_sim)
232
+ mmr_result[ngram1] = lambda_ * similary_score_to_doc - (1 - lambda_) * max_sim
233
+
234
+ mmr_result_ls = [(key, mmr_result[key]) for key in mmr_result]
235
+ mmr_result_ls = sorted(mmr_result_ls, key=lambda x: x[1], reverse=True)
236
+ return mmr_result_ls[:top_n]
237
+
238
+
239
+ def remove_duplicates(ngram_result):
240
+ to_remove = []
241
+ for ngram in ngram_result:
242
+
243
+ for ngram2 in ngram_result:
244
+ if ngram not in to_remove and ngram != ngram2 and ngram.lower() == ngram2.lower():
245
+ new_score = np.mean([ngram_result[ngram], ngram_result[ngram2]])
246
+
247
+ ngram_result[ngram] = new_score
248
+ to_remove.append(ngram2)
249
+
250
+ for ngram in to_remove:
251
+ ngram_result.pop(ngram)
252
+ return ngram_result
253
+
254
+
255
+ def compute_filtered_text(annotator, title, text):
256
+ annotated = annotator.annotate_text(text)
257
+ if title is not None:
258
+ annotated = annotator.annotate_text(title + '. ' + text)
259
+ filtered_sentences = []
260
+ # keep_tags = ['N', 'Np', 'V', 'A']
261
+ keep_tags = ['N', 'Np', 'V']
262
+ for key in annotated.keys():
263
+ sent = ' '.join([dict_['wordForm'] for dict_ in annotated[key] if dict_['posTag'] in keep_tags])
264
+ filtered_sentences.append(sent)
265
+ return filtered_sentences
266
+
267
+
268
+ def get_candidate_ngrams(segmentised_doc, filtered_segmentised_doc, ngram_n, stopwords_ls):
269
+ # get actual ngrams
270
+ # segmentised_doc = get_segmentised_doc(nlp, annotator, title, text)
271
+ actual_ngram_list = compute_ngram_list(segmentised_doc, ngram_n, stopwords_ls, subsentences=True)
272
+
273
+ # get filtered ngrams
274
+ # filtered_segmentised_doc = compute_filtered_text(annotator, title, text)
275
+ filtered_ngram_list = compute_ngram_list(filtered_segmentised_doc, ngram_n, stopwords_ls,
276
+ subsentences=False)
277
+
278
+ # get candiate ngrams
279
+ candidate_ngram = [ngram for ngram in filtered_ngram_list if ngram in actual_ngram_list]
280
+ return candidate_ngram
281
+
282
+
283
+ def get_ngram_frequencies(doc_segmentised, ngram_list):
284
+ ngram_dict_freq = {}
285
+ for ngram in ngram_list:
286
+ ngram_n = len(ngram.split())
287
+ count = 0
288
+ for sentence in doc_segmentised:
289
+ sent = sentence.split()
290
+ for i in range(len(sent) - ngram_n + 1):
291
+ pair = ' '.join(sent[i:i + ngram_n])
292
+ if pair == ngram:
293
+ count += 1
294
+ if count > 1:
295
+ ngram_dict_freq[ngram] = count
296
+
297
+ return ngram_dict_freq
298
+
299
+
300
+ def extract_keywords(text, title, nlp, annotator, tokenizer, phobert, stopwords_ls, ngram_n=(2, 2), top_n=5,
301
+ use_kmeans=False, use_mmr=False):
302
+ # ROOT_DIR = '/Users/thaopham/bao-lao-dong-data'
303
+ # with open(f'{ROOT_DIR}/utils/vietnamese-stopwords-dash.txt') as f:
304
+ # stopwords = [w.strip() for w in f.readlines()]
305
+
306
+ ngram_low, ngram_high = ngram_n
307
+
308
+ ne_ls, doc_segmentised = get_segmentised_doc(nlp, annotator, title, text)
309
+ filtered_doc_segmentised = compute_filtered_text(annotator, title, text)
310
+ # print(doc_segmentised)
311
+
312
+ print("Generate ngram list")
313
+ ngram_list = set()
314
+ for n in range(ngram_low, ngram_high + 1):
315
+ # ngram_list += compute_ngram_list(segmentised_doc=doc_segmentised, ngram_n=n, stopwords_ls=stopwords)
316
+ # ngram_list.update(compute_ngram_list(segmentised_doc=doc_segmentised, ngram_n=n, stopwords_ls=stopwords))
317
+ ngram_list.update(get_candidate_ngrams(doc_segmentised, filtered_doc_segmentised, n, stopwords_ls))
318
+ ngram_list.update([annotator.word_segment(ne)[0] for ne in ne_ls])
319
+
320
+ print(len(ngram_list))
321
+ ngram_list = get_ngram_frequencies(doc_segmentised, ngram_list)
322
+ print(len(ngram_list))
323
+ # print(sorted(ngram_list))
324
+
325
+ print("Generate ngram embeddings")
326
+ ngram_embeddings = compute_ngram_embeddings(tokenizer, phobert, ngram_list)
327
+
328
+ print("Generate document embeddings")
329
+ doc_embedding = get_doc_embeddings(filtered_doc_segmentised, tokenizer, phobert, stopwords_ls)
330
+
331
+ ngram_result = compute_ngram_similarity(ngram_list, ngram_embeddings, doc_embedding)
332
+ ngram_result = remove_duplicates(ngram_result)
333
+ non_diversified = sorted([(ngram, ngram_result[ngram]) for ngram in ngram_result],
334
+ key=lambda x: x[1], reverse=True)[:top_n]
335
+
336
+ # Diversify result
337
+ if use_kmeans:
338
+ diversified_kw_kmeans = diversify_result(ngram_result, ngram_embeddings, top_n=top_n)
339
+ return diversified_kw_kmeans
340
+
341
+ if use_mmr:
342
+ diversified_kw_mmr = mmr(ngram_result, ngram_embeddings, lambda_=0.85, top_n=top_n)
343
+ return diversified_kw_mmr
344
+ return non_diversified
345
+
346
+
347
+ def highlight(text, keywords):
348
+ for key in keywords:
349
+ text = text.replace(f" {key}", f" <mark>{key}</mark>")
350
+ return text
model.py ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import py_vncorenlp
2
+ from transformers import AutoTokenizer, pipeline
3
+ import torch
4
+ import os
5
+ from keyword_extraction import extract_keywords
6
+ import sys
7
+
8
+
9
+ class KeyBERTVi:
10
+
11
+ def __init__(self, stopwords_file_path):
12
+ self.annotator = py_vncorenlp.VnCoreNLP(annotators=["wseg", "pos"],
13
+ save_dir=f'{dir_path}/pretrained-models/vncorenlp')
14
+ # model = py_vncorenlp.VnCoreNLP(save_dir='/absolute/path/to/vncorenlp')
15
+ print("Loading PhoBERT model")
16
+ self.phobert_tokenizer = AutoTokenizer.from_pretrained("vinai/phobert-base-v2")
17
+
18
+ # use absolute path because torch is cached
19
+ self.phobert = torch.load(f'{dir_path}/pretrained-models/phobert.pt')
20
+ self.phobert.eval()
21
+
22
+ print("Loading NER model")
23
+ ner_tokenizer = AutoTokenizer.from_pretrained("NlpHUST/ner-vietnamese-electra-base")
24
+ ner_model = torch.load(f'{dir_path}/pretrained-models/ner-vietnamese-electra-base.pt')
25
+ ner_model.eval()
26
+ self.ner_pipeline = pipeline("ner", model=ner_model, tokenizer=ner_tokenizer)
27
+
28
+ with open(stopwords_file_path) as f:
29
+ self.stopwords = [w.strip() for w in f.readlines()]
30
+
31
+ def extract_keywords(self, title, text, ngram_range=(1, 3), top_n=5):
32
+ keyword_ls = extract_keywords(text, title,
33
+ self.ner_pipeline,
34
+ self.annotator,
35
+ self.phobert_tokenizer,
36
+ self.phobert,
37
+ self.stopwords,
38
+ ngram_n=ngram_range,
39
+ top_n=top_n)
40
+ return keyword_ls
41
+
42
+
43
+ dir_path = os.path.dirname(os.path.realpath(__file__))
44
+ if __name__ == "__main__":
45
+ # args
46
+ print(dir_path)
47
+
48
+ stopwords_file_path = f'{dir_path}/vietnamese-stopwords-dash.txt'
49
+
50
+ text_file_path = sys.argv[1]
51
+ with open(f'{dir_path}/{text_file_path}', 'r') as f:
52
+ text = ' '.join([ln.strip() for ln in f.readlines()])
53
+ print(text)
54
+
55
+ kw_model = KeyBERTVi(stopwords_file_path)
56
+ title = None
57
+ keyword_ls = kw_model.extract_keywords(title, text, ngram_range=(1, 3), top_n=5)
58
+ print(keyword_ls)
named_entities.py ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # from transformers import AutoModelForTokenClassification, AutoTokenizer, pipeline
2
+ from underthesea import sent_tokenize
3
+ import torch
4
+
5
+
6
+ def substring(w, ls):
7
+ for w2 in ls:
8
+ if w != w2 and w in w2:
9
+ return True
10
+ return False
11
+
12
+
13
+ def get_ner_phrases(sent_ner_result):
14
+ ner_list = []
15
+ current_ner = [sent_ner_result[0]["word"]]
16
+ current_idx = sent_ner_result[0]["index"]
17
+ for i in range(1, len(sent_ner_result)):
18
+ if sent_ner_result[i]["index"] == current_idx + 1:
19
+ current_ner.append(sent_ner_result[i]["word"])
20
+ else:
21
+ ner_list.append((' '.join(current_ner), sent_ner_result[i - 1]['entity']))
22
+ current_ner = [sent_ner_result[i]["word"]]
23
+
24
+ current_idx = sent_ner_result[i]["index"]
25
+
26
+ ner_list.append((' '.join(current_ner), sent_ner_result[len(sent_ner_result) - 1]['entity']))
27
+ return ner_list
28
+
29
+
30
+ def get_named_entities(nlp, doc):
31
+ ner_lists = []
32
+ for sent in sent_tokenize(doc):
33
+ sent_ner_result = nlp(sent)
34
+ if len(sent_ner_result) > 0:
35
+ ner_lists += get_ner_phrases(sent_ner_result)
36
+
37
+ # print(ner_lists)
38
+
39
+ ner_list_non_dup = []
40
+ for (entity, ner_type) in ner_lists:
41
+ if entity not in ner_list_non_dup and ner_type.startswith('I'):
42
+ ner_list_non_dup.append(entity)
43
+
44
+ ner_list_final = [w.replace(" ##", "") for w in ner_list_non_dup if not substring(w, ner_list_non_dup)]
45
+ return ner_list_final
process_text.py ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from string import punctuation
2
+ import re
3
+
4
+
5
+ def process_article_content(text):
6
+ full_text_processed = replace_all(text.strip())
7
+
8
+ while '\n\n' in full_text_processed:
9
+ full_text_processed = full_text_processed.replace('\n\n', '\n')
10
+
11
+ full_text_processed = process_sticking_sentences(full_text_processed)
12
+
13
+ pattern = "Ảnh: [A-ZĐÀÁÂÃÈÉÊẾÌÍÒÓÔÕÙÚĂĐĨŨƠƯĂẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴÝỶỸa-zđ][a-zàáâãèéêếìíòóôõùúăđĩũơưăạảấầẩẫậắằẳẵặẹẻẽềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹ]+ [A-ZĐÀÁÂÃÈÉÊẾÌÍÒÓÔÕÙÚĂĐĨŨƠƯĂẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴÝỶỸa-zđ][a-zàáâãèéêếìíòóôõùúăđĩũơưăạảấầẩẫậắằẳẵặẹẻẽềểễệỉịọỏốồổỗộớờởỡợụủứừửữựỳỵỷỹ]+\.?"
14
+ full_text_processed = re.sub(pattern, '', full_text_processed)
15
+
16
+ pattern = "Ảnh: [A-ZĐÀÁÂÃÈÉÊẾÌÍÒÓÔÕÙÚĂĐĨŨƠƯĂẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼỀỂỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪỬỮỰỲỴÝỶỸ]+\.?"
17
+ full_text_processed = re.sub(pattern, '', full_text_processed)
18
+
19
+ while ' ' in full_text_processed:
20
+ full_text_processed = full_text_processed.replace(' ', ' ')
21
+ return full_text_processed
22
+
23
+
24
+ def replace_all(text):
25
+ dict_map = {
26
+ "òa": "oà",
27
+ "Òa": "Oà",
28
+ "ÒA": "OÀ",
29
+ "óa": "oá",
30
+ "Óa": "Oá",
31
+ "ÓA": "OÁ",
32
+ "ỏa": "oả",
33
+ "Ỏa": "Oả",
34
+ "ỎA": "OẢ",
35
+ "õa": "oã",
36
+ "Õa": "Oã",
37
+ "ÕA": "OÃ",
38
+ "ọa": "oạ",
39
+ "Ọa": "Oạ",
40
+ "ỌA": "OẠ",
41
+ "òe": "oè",
42
+ "Òe": "Oè",
43
+ "ÒE": "OÈ",
44
+ "óe": "oé",
45
+ "Óe": "Oé",
46
+ "ÓE": "OÉ",
47
+ "ỏe": "oẻ",
48
+ "Ỏe": "Oẻ",
49
+ "ỎE": "OẺ",
50
+ "õe": "oẽ",
51
+ "Õe": "Oẽ",
52
+ "ÕE": "OẼ",
53
+ "ọe": "oẹ",
54
+ "Ọe": "Oẹ",
55
+ "ỌE": "OẸ",
56
+ "ùy": "uỳ",
57
+ "Ùy": "Uỳ",
58
+ "ÙY": "UỲ",
59
+ "úy": "uý",
60
+ "Úy": "Uý",
61
+ "ÚY": "UÝ",
62
+ "ủy": "uỷ",
63
+ "Ủy": "Uỷ",
64
+ "ỦY": "UỶ",
65
+ "ũy": "uỹ",
66
+ "Ũy": "Uỹ",
67
+ "ŨY": "UỸ",
68
+ "ụy": "uỵ",
69
+ "Ụy": "Uỵ",
70
+ "ỤY": "UỴ",
71
+ "\xa0": " ",
72
+ "…": "...",
73
+ "''": '"',
74
+ "&#34;": '"',
75
+ "&#39;": "'",
76
+ "H'Mông": "Hmông",
77
+ "H'mông": "Hmông",
78
+ "H’mông": "Hmông",
79
+ "H’Mông": "Hmông",
80
+ "H’MÔNG": "Hmông",
81
+ "M'Nông": "Mnông",
82
+ "M'nông": "Mnông",
83
+ "M'NÔNG": "Mnông",
84
+ "M’Nông": "Mnông",
85
+ "M’NÔNG": "Mnông",
86
+ '\u200b\u200b': ""
87
+ }
88
+ for i, j in dict_map.items():
89
+ text = text.replace(i, j)
90
+ return text
91
+
92
+
93
+ def process_sticking_sentences(full_text):
94
+ for i in range(len(full_text) - 1):
95
+ c1 = full_text[i]
96
+ c2 = full_text[i + 1]
97
+
98
+ # 'end of sentence.Start'
99
+ if c1 in punctuation and c2.isalpha() and c2.isupper():
100
+ before = full_text[:i + 1]
101
+ after = full_text[i + 1:]
102
+
103
+ full_text = before + " " + after
104
+
105
+ # 'end of sentenceStart'
106
+ if c1.isalpha() and c1.islower() and c2.isalpha() and c2.isupper():
107
+ before = full_text[:i + 1]
108
+ after = full_text[i + 1:]
109
+
110
+ full_text = before + ". " + after
111
+ return full_text
vietnamese-stopwords-dash.txt ADDED
@@ -0,0 +1,1990 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ a_lô
2
+ a_ha
3
+ ai
4
+ ai_ai
5
+ ai_nấy
6
+ ai_đó
7
+ alô
8
+ amen
9
+ anh
10
+ anh_ấy
11
+ ba
12
+ ba_ba
13
+ ba_bản
14
+ ba_cùng
15
+ ba_họ
16
+ ba_ngày
17
+ ba_ngôi
18
+ ba_tăng
19
+ bao_giờ
20
+ bao_lâu
21
+ bao_nhiêu
22
+ bao_nả
23
+ bay_biến
24
+ biết
25
+ biết_bao
26
+ biết_bao_nhiêu
27
+ biết_chắc
28
+ biết_chừng_nào
29
+ biết_mình
30
+ biết_mấy
31
+ biết_thế
32
+ biết_trước
33
+ biết_việc
34
+ biết_đâu
35
+ biết_đâu_chừng
36
+ biết_đâu_đấy
37
+ biết_được
38
+ buổi
39
+ buổi_làm
40
+ buổi_mới
41
+ buổi_ngày
42
+ buổi_sớm
43
+
44
+ bà_ấy
45
+ bài
46
+ bài_bác
47
+ bài_bỏ
48
+ bài_cái
49
+ bác
50
+ bán
51
+ bán_cấp
52
+ bán_dạ
53
+ bán_thế
54
+ bây_bẩy
55
+ bây_chừ
56
+ bây_giờ
57
+ bây_nhiêu
58
+ bèn
59
+ béng
60
+ bên
61
+ bên_bị
62
+ bên_có
63
+ bên_cạnh
64
+ bông
65
+ bước
66
+ bước_khỏi
67
+ bước_tới
68
+ bước_đi
69
+ bạn
70
+ bản
71
+ bản_bộ
72
+ bản_riêng
73
+ bản_thân
74
+ bản_ý
75
+ bất_chợt
76
+ bất_cứ
77
+ bất_giác
78
+ bất_kì
79
+ bất_kể
80
+ bất_kỳ
81
+ bất_luận
82
+ bất_ngờ
83
+ bất_nhược
84
+ bất_quá
85
+ bất_quá_chỉ
86
+ bất_thình_lình
87
+ bất_tử
88
+ bất_đồ
89
+ bấy
90
+ bấy_chầy
91
+ bấy_chừ
92
+ bấy_giờ
93
+ bấy_lâu
94
+ bấy_lâu_nay
95
+ bấy_nay
96
+ bấy_nhiêu
97
+ bập_bà_bập_bõm
98
+ bập_bõm
99
+ bắt_đầu
100
+ bắt_đầu_từ
101
+ bằng
102
+ bằng_cứ
103
+ bằng_không
104
+ bằng_người
105
+ bằng_nhau
106
+ bằng_như
107
+ bằng_nào
108
+ bằng_nấy
109
+ bằng_vào
110
+ bằng_được
111
+ bằng_ấy
112
+ bển
113
+ bệt
114
+ bị
115
+ bị_chú
116
+ bị_vì
117
+ bỏ
118
+ bỏ_bà
119
+ bỏ_cha
120
+ bỏ_cuộc
121
+ bỏ_không
122
+ bỏ_lại
123
+ bỏ_mình
124
+ bỏ_mất
125
+ bỏ_mẹ
126
+ bỏ_nhỏ
127
+ bỏ_quá
128
+ bỏ_ra
129
+ bỏ_riêng
130
+ bỏ_việc
131
+ bỏ_xa
132
+ bỗng
133
+ bỗng_chốc
134
+ bỗng_dưng
135
+ bỗng_không
136
+ bỗng_nhiên
137
+ bỗng_nhưng
138
+ bỗng_thấy
139
+ bỗng_đâu
140
+ bộ
141
+ bộ_thuộc
142
+ bộ_điều
143
+ bội_phần
144
+ bớ
145
+ bởi
146
+ bởi_ai
147
+ bởi_chưng
148
+ bởi_nhưng
149
+ bởi_sao
150
+ bởi_thế
151
+ bởi_thế_cho_nên
152
+ bởi_tại
153
+ bởi_vì
154
+ bởi_vậy
155
+ bởi_đâu
156
+ bức
157
+ cao
158
+ cao_lâu
159
+ cao_ráo
160
+ cao_răng
161
+ cao_sang
162
+ cao_số
163
+ cao_thấp
164
+ cao_thế
165
+ cao_xa
166
+ cha
167
+ cha_chả
168
+ chao_ôi
169
+ chia_sẻ
170
+ chiếc
171
+ cho
172
+ cho_biết
173
+ cho_chắc
174
+ cho_hay
175
+ cho_nhau
176
+ cho_nên
177
+ cho_rằng
178
+ cho_rồi
179
+ cho_thấy
180
+ cho_tin
181
+ cho_tới
182
+ cho_tới_khi
183
+ cho_về
184
+ cho_ăn
185
+ cho_đang
186
+ cho_được
187
+ cho_đến
188
+ cho_đến_khi
189
+ cho_đến_nỗi
190
+ choa
191
+ chu_cha
192
+ chui_cha
193
+ chung
194
+ chung_cho
195
+ chung_chung
196
+ chung_cuộc
197
+ chung_cục
198
+ chung_nhau
199
+ chung_qui
200
+ chung_quy
201
+ chung_quy_lại
202
+ chung_ái
203
+ chuyển
204
+ chuyển_tự
205
+ chuyển_đạt
206
+ chuyện
207
+ chuẩn_bị
208
+ chành_chạnh
209
+ chí_chết
210
+ chính
211
+ chính_bản
212
+ chính_giữa
213
+ chính_là
214
+ chính_thị
215
+ chính_điểm
216
+ chùn_chùn
217
+ chùn_chũn
218
+ chú
219
+ chú_dẫn
220
+ chú_khách
221
+ chú_mày
222
+ chú_mình
223
+ chúng
224
+ chúng_mình
225
+ chúng_ta
226
+ chúng_tôi
227
+ chúng_ông
228
+ chăn_chắn
229
+ chăng
230
+ chăng_chắc
231
+ chăng_nữa
232
+ chơi
233
+ chơi_họ
234
+ chưa
235
+ chưa_bao_giờ
236
+ chưa_chắc
237
+ chưa_có
238
+ chưa_cần
239
+ chưa_dùng
240
+ chưa_dễ
241
+ chưa_kể
242
+ chưa_tính
243
+ chưa_từng
244
+ chầm_chập
245
+ chậc
246
+ chắc
247
+ chắc_chắn
248
+ chắc_dạ
249
+ chắc_hẳn
250
+ chắc_lòng
251
+ chắc_người
252
+ chắc_vào
253
+ chắc_ăn
254
+ chẳng_lẽ
255
+ chẳng_những
256
+ chẳng_nữa
257
+ chẳng_phải
258
+ chết_nỗi
259
+ chết_thật
260
+ chết_tiệt
261
+ chỉ
262
+ chỉ_chính
263
+ chỉ_có
264
+ chỉ_là
265
+ chỉ_tên
266
+ chỉn
267
+ chị
268
+ chị_bộ
269
+ chị_ấy
270
+ chịu
271
+ chịu_chưa
272
+ chịu_lời
273
+ chịu_tốt
274
+ chịu_ăn
275
+ chọn
276
+ chọn_bên
277
+ chọn_ra
278
+ chốc_chốc
279
+ chớ
280
+ chớ_chi
281
+ chớ_gì
282
+ chớ_không
283
+ chớ_kể
284
+ chớ_như
285
+ chợt
286
+ chợt_nghe
287
+ chợt_nhìn
288
+ chủn
289
+ chứ
290
+ chứ_ai
291
+ chứ_còn
292
+ chứ_gì
293
+ chứ_không
294
+ chứ_không_phải
295
+ chứ_lại
296
+ chứ_lị
297
+ chứ_như
298
+ chứ_sao
299
+ coi_bộ
300
+ coi_mòi
301
+ con
302
+ con_con
303
+ con_dạ
304
+ con_nhà
305
+ con_tính
306
+ cu_cậu
307
+ cuối
308
+ cuối_cùng
309
+ cuối_điểm
310
+ cuốn
311
+ cuộc
312
+ càng
313
+ càng_càng
314
+ càng_hay
315
+ cá_nhân
316
+ các
317
+ các_cậu
318
+ cách
319
+ cách_bức
320
+ cách_không
321
+ cách_nhau
322
+ cách_đều
323
+ cái
324
+ cái_gì
325
+ cái_họ
326
+ cái_đã
327
+ cái_đó
328
+ cái_ấy
329
+ cây_nước
330
+ còn
331
+ còn_như
332
+ còn_nữa
333
+ còn_thời_gian
334
+ còn_về
335
+
336
+ có_ai
337
+ có_chuyện
338
+ có_chăng
339
+ có_chăng_là
340
+ có_chứ
341
+ có_cơ
342
+ có_dễ
343
+ có_họ
344
+ có_khi
345
+ có_ngày
346
+ có_người
347
+ có_nhiều
348
+ có_nhà
349
+ có_phải
350
+ có_số
351
+ có_tháng
352
+ có_thế
353
+ có_thể
354
+ có_vẻ
355
+ có_ý
356
+ có_ăn
357
+ có_điều
358
+ có_điều_kiện
359
+ có_đáng
360
+ có_đâu
361
+ có_được
362
+ cóc_khô
363
+
364
+ cô_mình
365
+ cô_quả
366
+ cô_tăng
367
+ cô_ấy
368
+ công_nhiên
369
+ cùng
370
+ cùng_chung
371
+ cùng_cực
372
+ cùng_nhau
373
+ cùng_tuổi
374
+ cùng_tột
375
+ cùng_với
376
+ cùng_ăn
377
+ căn
378
+ căn_cái
379
+ căn_cắt
380
+ căn_tính
381
+ cũng
382
+ cũng_như
383
+ cũng_nên
384
+ cũng_thế
385
+ cũng_vậy
386
+ cũng_vậy_thôi
387
+ cũng_được
388
+
389
+ cơ_chỉ
390
+ cơ_chừng
391
+ cơ_cùng
392
+ cơ_dẫn
393
+ cơ_hồ
394
+ cơ_hội
395
+ cơ_mà
396
+ cơn
397
+ cả
398
+ cả_nghe
399
+ cả_nghĩ
400
+ cả_ngày
401
+ cả_người
402
+ cả_nhà
403
+ cả_năm
404
+ cả_thảy
405
+ cả_thể
406
+ cả_tin
407
+ cả_ăn
408
+ cả_đến
409
+ cảm_thấy
410
+ cảm_ơn
411
+ cấp
412
+ cấp_số
413
+ cấp_trực_tiếp
414
+ cần
415
+ cần_cấp
416
+ cần_gì
417
+ cần_số
418
+ cật_lực
419
+ cật_sức
420
+ cậu
421
+ cổ_lai
422
+ cụ_thể
423
+ cụ_thể_là
424
+ cụ_thể_như
425
+ của
426
+ của_ngọt
427
+ của_tin
428
+ cứ
429
+ cứ_như
430
+ cứ_việc
431
+ cứ_điểm
432
+ cực_lực
433
+ do
434
+ do_vì
435
+ do_vậy
436
+ do_đó
437
+ duy
438
+ duy_chỉ
439
+ duy_có
440
+ dài
441
+ dài_lời
442
+ dài_ra
443
+ dành
444
+ dành_dành
445
+ dào
446
+
447
+
448
+ dù_cho
449
+ dù_dì
450
+ dù_gì
451
+ dù_rằng
452
+ dù_sao
453
+ dùng
454
+ dùng_cho
455
+ dùng_hết
456
+ dùng_làm
457
+ dùng_đến
458
+ dưới
459
+ dưới_nước
460
+ dạ
461
+ dạ_bán
462
+ dạ_con
463
+ dạ_dài
464
+ dạ_dạ
465
+ dạ_khách
466
+ dần_dà
467
+ dần_dần
468
+ dầu_sao
469
+ dẫn
470
+ dẫu
471
+ dẫu_mà
472
+ dẫu_rằng
473
+ dẫu_sao
474
+ dễ
475
+ dễ_dùng
476
+ dễ_gì
477
+ dễ_khiến
478
+ dễ_nghe
479
+ dễ_ngươi
480
+ dễ_như_chơi
481
+ dễ_sợ
482
+ dễ_sử_dụng
483
+ dễ_thường
484
+ dễ_thấy
485
+ dễ_ăn
486
+ dễ_đâu
487
+ dở_chừng
488
+ dữ
489
+ dữ_cách
490
+ em
491
+ em_em
492
+ giá_trị
493
+ giá_trị_thực_tế
494
+ giảm
495
+ giảm_chính
496
+ giảm_thấp
497
+ giảm_thế
498
+ giống
499
+ giống_người
500
+ giống_nhau
501
+ giống_như
502
+ giờ
503
+ giờ_lâu
504
+ giờ_này
505
+ giờ_đi
506
+ giờ_đây
507
+ giờ_đến
508
+ giữ
509
+ giữ_lấy
510
+ giữ_ý
511
+ giữa
512
+ giữa_lúc
513
+ gây
514
+ gây_cho
515
+ gây_giống
516
+ gây_ra
517
+ gây_thêm
518
+
519
+ gì_gì
520
+ gì_đó
521
+ gần
522
+ gần_bên
523
+ gần_hết
524
+ gần_ngày
525
+ gần_như
526
+ gần_xa
527
+ gần_đây
528
+ gần_đến
529
+ gặp
530
+ gặp_khó_khăn
531
+ gặp_phải
532
+ gồm
533
+ hay
534
+ hay_biết
535
+ hay_hay
536
+ hay_không
537
+ hay_là
538
+ hay_làm
539
+ hay_nhỉ
540
+ hay_nói
541
+ hay_sao
542
+ hay_tin
543
+ hay_đâu
544
+ hiểu
545
+ hiện_nay
546
+ hiện_tại
547
+ hoàn_toàn
548
+ hoặc
549
+ hoặc_là
550
+ hãy
551
+ hãy_còn
552
+ hơn
553
+ hơn_cả
554
+ hơn_hết
555
+ hơn_là
556
+ hơn_nữa
557
+ hơn_trước
558
+ hầu_hết
559
+ hết
560
+ hết_chuyện
561
+ hết_cả
562
+ hết_của
563
+ hết_nói
564
+ hết_ráo
565
+ hết_rồi
566
+ hết_ý
567
+ họ
568
+ họ_gần
569
+ họ_xa
570
+ hỏi
571
+ hỏi_lại
572
+ hỏi_xem
573
+ hỏi_xin
574
+ hỗ_trợ
575
+ khi
576
+ khi_khác
577
+ khi_không
578
+ khi_nào
579
+ khi_nên
580
+ khi_trước
581
+ khiến
582
+ khoảng
583
+ khoảng_cách
584
+ khoảng_không
585
+ khá
586
+ khá_tốt
587
+ khác
588
+ khác_gì
589
+ khác_khác
590
+ khác_nhau
591
+ khác_nào
592
+ khác_thường
593
+ khác_xa
594
+ khách
595
+ khó
596
+ khó_biết
597
+ khó_chơi
598
+ khó_khăn
599
+ khó_làm
600
+ khó_mở
601
+ khó_nghe
602
+ khó_nghĩ
603
+ khó_nói
604
+ khó_thấy
605
+ khó_tránh
606
+ không
607
+ không_ai
608
+ không_bao_giờ
609
+ không_bao_lâu
610
+ không_biết
611
+ không_bán
612
+ không_chỉ
613
+ không_còn
614
+ không_có
615
+ không_có_gì
616
+ không_cùng
617
+ không_cần
618
+ không_cứ
619
+ không_dùng
620
+ không_gì
621
+ không_hay
622
+ không_khỏi
623
+ không_kể
624
+ không_ngoài
625
+ không_nhận
626
+ không_những
627
+ không_phải
628
+ không_phải_không
629
+ không_thể
630
+ không_tính
631
+ không_điều_kiện
632
+ không_được
633
+ không_đầy
634
+ không_để
635
+ khẳng_định
636
+ khỏi
637
+ khỏi_nói
638
+ kể
639
+ kể_cả
640
+ kể_như
641
+ kể_tới
642
+ kể_từ
643
+ liên_quan
644
+ loại
645
+ loại_từ
646
+ luôn
647
+ luôn_cả
648
+ luôn_luôn
649
+ luôn_tay
650
+
651
+ là_cùng
652
+ là_là
653
+ là_nhiều
654
+ là_phải
655
+ là_thế_nào
656
+ là_vì
657
+ là_ít
658
+ làm
659
+ làm_bằng
660
+ làm_cho
661
+ làm_dần_dần
662
+ làm_gì
663
+ làm_lòng
664
+ làm_lại
665
+ làm_lấy
666
+ làm_mất
667
+ làm_ngay
668
+ làm_như
669
+ làm_nên
670
+ làm_ra
671
+ làm_riêng
672
+ làm_sao
673
+ làm_theo
674
+ làm_thế_nào
675
+ làm_tin
676
+ làm_tôi
677
+ làm_tăng
678
+ làm_tại
679
+ làm_tắp_lự
680
+ làm_vì
681
+ làm_đúng
682
+ làm_được
683
+ lâu
684
+ lâu_các
685
+ lâu_lâu
686
+ lâu_nay
687
+ lâu_ngày
688
+ lên
689
+ lên_cao
690
+ lên_cơn
691
+ lên_mạnh
692
+ lên_ngôi
693
+ lên_nước
694
+ lên_số
695
+ lên_xuống
696
+ lên_đến
697
+ lòng
698
+ lòng_không
699
+ lúc
700
+ lúc_khác
701
+ lúc_lâu
702
+ lúc_nào
703
+ lúc_này
704
+ lúc_sáng
705
+ lúc_trước
706
+ lúc_đi
707
+ lúc_đó
708
+ lúc_đến
709
+ lúc_ấy
710
+ lý_do
711
+ lượng
712
+ lượng_cả
713
+ lượng_số
714
+ lượng_từ
715
+ lại
716
+ lại_bộ
717
+ lại_cái
718
+ lại_còn
719
+ lại_giống
720
+ lại_làm
721
+ lại_người
722
+ lại_nói
723
+ lại_nữa
724
+ lại_quả
725
+ lại_thôi
726
+ lại_ăn
727
+ lại_đây
728
+ lấy
729
+ lấy_có
730
+ lấy_cả
731
+ lấy_giống
732
+ lấy_làm
733
+ lấy_lý_do
734
+ lấy_lại
735
+ lấy_ra
736
+ lấy_ráo
737
+ lấy_sau
738
+ lấy_số
739
+ lấy_thêm
740
+ lấy_thế
741
+ lấy_vào
742
+ lấy_xuống
743
+ lấy_được
744
+ lấy_để
745
+ lần
746
+ lần_khác
747
+ lần_lần
748
+ lần_nào
749
+ lần_này
750
+ lần_sang
751
+ lần_sau
752
+ lần_theo
753
+ lần_trước
754
+ lần_tìm
755
+ lớn
756
+ lớn_lên
757
+ lớn_nhỏ
758
+ lời
759
+ lời_chú
760
+ lời_nói
761
+ mang
762
+ mang_lại
763
+ mang_mang
764
+ mang_nặng
765
+ mang_về
766
+ muốn
767
+
768
+ mà_cả
769
+ mà_không
770
+ mà_lại
771
+ mà_thôi
772
+ mà_vẫn
773
+ mình
774
+ mạnh
775
+ mất
776
+ mất_còn
777
+ mọi
778
+ mọi_giờ
779
+ mọi_khi
780
+ mọi_lúc
781
+ mọi_người
782
+ mọi_nơi
783
+ mọi_sự
784
+ mọi_thứ
785
+ mọi_việc
786
+ mối
787
+ mỗi
788
+ mỗi_lúc
789
+ mỗi_lần
790
+ mỗi_một
791
+ mỗi_ngày
792
+ mỗi_người
793
+ một
794
+ một_cách
795
+ một_cơn
796
+ một_khi
797
+ một_lúc
798
+ một_số
799
+ một_vài
800
+ một_ít
801
+ mới
802
+ mới_hay
803
+ mới_rồi
804
+ mới_đây
805
+ mở
806
+ mở_mang
807
+ mở_nước
808
+ mở_ra
809
+ mợ
810
+ mức
811
+ nay
812
+ ngay
813
+ ngay_bây_giờ
814
+ ngay_cả
815
+ ngay_khi
816
+ ngay_khi_đến
817
+ ngay_lúc
818
+ ngay_lúc_này
819
+ ngay_lập_tức
820
+ ngay_thật
821
+ ngay_tức_khắc
822
+ ngay_tức_thì
823
+ ngay_từ
824
+ nghe
825
+ nghe_chừng
826
+ nghe_hiểu
827
+ nghe_không
828
+ nghe_lại
829
+ nghe_nhìn
830
+ nghe_như
831
+ nghe_nói
832
+ nghe_ra
833
+ nghe_rõ
834
+ nghe_thấy
835
+ nghe_tin
836
+ nghe_trực_tiếp
837
+ nghe_đâu
838
+ nghe_đâu_như
839
+ nghe_được
840
+ nghen
841
+ nghiễm_nhiên
842
+ nghĩ
843
+ nghĩ_lại
844
+ nghĩ_ra
845
+ nghĩ_tới
846
+ nghĩ_xa
847
+ nghĩ_đến
848
+ nghỉm
849
+ ngoài
850
+ ngoài_này
851
+ ngoài_ra
852
+ ngoài_xa
853
+ ngoải
854
+ nguồn
855
+ ngày
856
+ ngày_càng
857
+ ngày_cấp
858
+ ngày_giờ
859
+ ngày_ngày
860
+ ngày_nào
861
+ ngày_này
862
+ ngày_nọ
863
+ ngày_qua
864
+ ngày_rày
865
+ ngày_tháng
866
+ ngày_xưa
867
+ ngày_xửa
868
+ ngày_đến
869
+ ngày_ấy
870
+ ngôi
871
+ ngôi_nhà
872
+ ngôi_thứ
873
+ ngõ_hầu
874
+ ngăn_ngắt
875
+ ngươi
876
+ người_hỏi
877
+ người_khác
878
+ người_khách
879
+ người_mình
880
+ người_nghe
881
+ người_người
882
+ người_nhận
883
+ ngọn
884
+ ngọn_nguồn
885
+ ngọt
886
+ ngồi
887
+ ngồi_bệt
888
+ ngồi_không
889
+ ngồi_sau
890
+ ngồi_trệt
891
+ ngộ_nhỡ
892
+ nhanh
893
+ nhanh_lên
894
+ nhanh_tay
895
+ nhau
896
+ nhiên_hậu
897
+ nhiều
898
+ nhiều_ít
899
+ nhiệt_liệt
900
+ nhung_nhăng
901
+ nhà
902
+ nhà_chung
903
+ nhà_khó
904
+ nhà_làm
905
+ nhà_ngoài
906
+ nhà_ngươi
907
+ nhà_tôi
908
+ nhà_việc
909
+ nhân_dịp
910
+ nhân_tiện
911
+ nhé
912
+ nhìn
913
+ nhìn_chung
914
+ nhìn_lại
915
+ nhìn_nhận
916
+ nhìn_theo
917
+ nhìn_thấy
918
+ nhìn_xuống
919
+ nhóm
920
+ nhón_nhén
921
+ như
922
+ như_ai
923
+ như_chơi
924
+ như_không
925
+ như_là
926
+ như_nhau
927
+ như_quả
928
+ như_sau
929
+ như_thường
930
+ như_thế
931
+ như_thế_nào
932
+ như_thể
933
+ như_trên
934
+ như_trước
935
+ như_tuồng
936
+ như_vậy
937
+ như_ý
938
+ nhưng
939
+ nhưng_mà
940
+ nhược_bằng
941
+ nhất
942
+ nhất_loạt
943
+ nhất_luật
944
+ nhất_là
945
+ nhất_mực
946
+ nhất_nhất
947
+ nhất_quyết
948
+ nhất_sinh
949
+ nhất_thiết
950
+ nhất_thì
951
+ nhất_tâm
952
+ nhất_tề
953
+ nhất_đán
954
+ nhất_định
955
+ nhận
956
+ nhận_biết
957
+ nhận_họ
958
+ nhận_làm
959
+ nhận_nhau
960
+ nhận_ra
961
+ nhận_thấy
962
+ nhận_việc
963
+ nhận_được
964
+ nhằm
965
+ nhằm_khi
966
+ nhằm_lúc
967
+ nhằm_vào
968
+ nhằm_để
969
+ nhỉ
970
+ nhỏ
971
+ nhỏ_người
972
+ nhớ
973
+ nhớ_bập_bõm
974
+ nhớ_lại
975
+ nhớ_lấy
976
+ nhớ_ra
977
+ nhờ
978
+ nhờ_chuyển
979
+ nhờ_có
980
+ nhờ_nhờ
981
+ nhờ_đó
982
+ nhỡ_ra
983
+ những
984
+ những_ai
985
+ những_khi
986
+ những_là
987
+ những_lúc
988
+ những_muốn
989
+ những_như
990
+ nào
991
+ nào_cũng
992
+ nào_hay
993
+ nào_là
994
+ nào_phải
995
+ nào_đâu
996
+ nào_đó
997
+ này
998
+ này_nọ
999
+ nên
1000
+ nên_chi
1001
+ nên_chăng
1002
+ nên_làm
1003
+ nên_người
1004
+ nên_tránh
1005
+
1006
+ nóc
1007
+ nói
1008
+ nói_bông
1009
+ nói_chung
1010
+ nói_khó
1011
+ nói_là
1012
+ nói_lên
1013
+ nói_lại
1014
+ nói_nhỏ
1015
+ nói_phải
1016
+ nói_qua
1017
+ nói_ra
1018
+ nói_riêng
1019
+ nói_rõ
1020
+ nói_thêm
1021
+ nói_thật
1022
+ nói_toẹt
1023
+ nói_trước
1024
+ nói_tốt
1025
+ nói_với
1026
+ nói_xa
1027
+ nói_ý
1028
+ nói_đến
1029
+ nói_đủ
1030
+ năm
1031
+ năm_tháng
1032
+ nơi
1033
+ nơi_nơi
1034
+ nước
1035
+ nước_bài
1036
+ nước_cùng
1037
+ nước_lên
1038
+ nước_nặng
1039
+ nước_quả
1040
+ nước_xuống
1041
+ nước_ăn
1042
+ nước_đến
1043
+ nấy
1044
+ nặng
1045
+ nặng_căn
1046
+ nặng_mình
1047
+ nặng_về
1048
+ nếu
1049
+ nếu_có
1050
+ nếu_cần
1051
+ nếu_không
1052
+ nếu_mà
1053
+ nếu_như
1054
+ nếu_thế
1055
+ nếu_vậy
1056
+ nếu_được
1057
+ nền
1058
+ nọ
1059
+ nớ
1060
+ nức_nở
1061
+ nữa
1062
+ nữa_khi
1063
+ nữa_là
1064
+ nữa_rồi
1065
+ oai_oái
1066
+ oái
1067
+ pho
1068
+ phè
1069
+ phè_phè
1070
+ phía
1071
+ phía_bên
1072
+ phía_bạn
1073
+ phía_dưới
1074
+ phía_sau
1075
+ phía_trong
1076
+ phía_trên
1077
+ phía_trước
1078
+ phóc
1079
+ phót
1080
+ phù_hợp
1081
+ phăn_phắt
1082
+ phương_chi
1083
+ phải
1084
+ phải_biết
1085
+ phải_chi
1086
+ phải_chăng
1087
+ phải_cách
1088
+ phải_cái
1089
+ phải_giờ
1090
+ phải_khi
1091
+ phải_không
1092
+ phải_lại
1093
+ phải_lời
1094
+ phải_người
1095
+ phải_như
1096
+ phải_rồi
1097
+ phải_tay
1098
+ phần
1099
+ phần_lớn
1100
+ phần_nhiều
1101
+ phần_nào
1102
+ phần_sau
1103
+ phần_việc
1104
+ phắt
1105
+ phỉ_phui
1106
+ phỏng
1107
+ phỏng_như
1108
+ phỏng_nước
1109
+ phỏng_theo
1110
+ phỏng_tính
1111
+ phốc
1112
+ phụt
1113
+ phứt
1114
+ qua
1115
+ qua_chuyện
1116
+ qua_khỏi
1117
+ qua_lại
1118
+ qua_lần
1119
+ qua_ngày
1120
+ qua_tay
1121
+ qua_thì
1122
+ qua_đi
1123
+ quan_trọng
1124
+ quan_trọng_vấn_đề
1125
+ quan_tâm
1126
+ quay
1127
+ quay_bước
1128
+ quay_lại
1129
+ quay_số
1130
+ quay_đi
1131
+ quá
1132
+ quá_bán
1133
+ quá_bộ
1134
+ quá_giờ
1135
+ quá_lời
1136
+ quá_mức
1137
+ quá_nhiều
1138
+ quá_tay
1139
+ quá_thì
1140
+ quá_tin
1141
+ quá_trình
1142
+ quá_tuổi
1143
+ quá_đáng
1144
+ quá_ư
1145
+ quả
1146
+ quả_là
1147
+ quả_thật
1148
+ quả_thế
1149
+ quả_vậy
1150
+ quận
1151
+ ra
1152
+ ra_bài
1153
+ ra_bộ
1154
+ ra_chơi
1155
+ ra_gì
1156
+ ra_lại
1157
+ ra_lời
1158
+ ra_ngôi
1159
+ ra_người
1160
+ ra_sao
1161
+ ra_tay
1162
+ ra_vào
1163
+ ra_ý
1164
+ ra_điều
1165
+ ra_đây
1166
+ ren_rén
1167
+ riu_ríu
1168
+ riêng
1169
+ riêng_từng
1170
+ riệt
1171
+ rày
1172
+ ráo
1173
+ ráo_cả
1174
+ ráo_nước
1175
+ ráo_trọi
1176
+ rén
1177
+ rén_bước
1178
+ rích
1179
+ rón_rén
1180
+
1181
+ rõ_là
1182
+ rõ_thật
1183
+ rút_cục
1184
+ răng
1185
+ răng_răng
1186
+ rất
1187
+ rất_lâu
1188
+ rằng
1189
+ rằng_là
1190
+ rốt_cuộc
1191
+ rốt_cục
1192
+ rồi
1193
+ rồi_nữa
1194
+ rồi_ra
1195
+ rồi_sao
1196
+ rồi_sau
1197
+ rồi_tay
1198
+ rồi_thì
1199
+ rồi_xem
1200
+ rồi_đây
1201
+ rứa
1202
+ sa_sả
1203
+ sang
1204
+ sang_năm
1205
+ sang_sáng
1206
+ sang_tay
1207
+ sao
1208
+ sao_bản
1209
+ sao_bằng
1210
+ sao_cho
1211
+ sao_vậy
1212
+ sao_đang
1213
+ sau
1214
+ sau_chót
1215
+ sau_cuối
1216
+ sau_cùng
1217
+ sau_hết
1218
+ sau_này
1219
+ sau_nữa
1220
+ sau_sau
1221
+ sau_đây
1222
+ sau_đó
1223
+ so
1224
+ so_với
1225
+ song_le
1226
+ suýt
1227
+ suýt_nữa
1228
+ sáng
1229
+ sáng_ngày
1230
+ sáng_rõ
1231
+ sáng_thế
1232
+ sáng_ý
1233
+
1234
+ sì_sì
1235
+ sất
1236
+ sắp
1237
+ sắp_đặt
1238
+ sẽ
1239
+ sẽ_biết
1240
+ sẽ_hay
1241
+ số
1242
+ số_cho_biết
1243
+ số_cụ_thể
1244
+ số_loại
1245
+ số_là
1246
+ số_phần
1247
+ số_thiếu
1248
+ sốt_sột
1249
+ sớm
1250
+ sớm_ngày
1251
+ sở_dĩ
1252
+ sử_dụng
1253
+ sự
1254
+ sự_thế
1255
+ sự_việc
1256
+ tanh
1257
+ tanh_tanh
1258
+ tay
1259
+ tay_quay
1260
+ tha_hồ
1261
+ tha_hồ_chơi
1262
+ tha_hồ_ăn
1263
+ than_ôi
1264
+ thanh
1265
+ thanh_ba
1266
+ thanh_chuyển
1267
+ thanh_không
1268
+ thanh_thanh
1269
+ thanh_tính
1270
+ thanh_điều_kiện
1271
+ thanh_điểm
1272
+ thay_đổi
1273
+ thay_đổi_tình_trạng
1274
+ theo
1275
+ theo_bước
1276
+ theo_như
1277
+ theo_tin
1278
+ thi_thoảng
1279
+ thiếu
1280
+ thiếu_gì
1281
+ thiếu_điểm
1282
+ thoạt
1283
+ thoạt_nghe
1284
+ thoạt_nhiên
1285
+ thoắt
1286
+ thuần
1287
+ thuần_ái
1288
+ thuộc
1289
+ thuộc_bài
1290
+ thuộc_cách
1291
+ thuộc_lại
1292
+ thuộc_từ
1293
+ thà
1294
+ thà_là
1295
+ thà_rằng
1296
+ thành_ra
1297
+ thành_thử
1298
+ thái_quá
1299
+ tháng
1300
+ tháng_ngày
1301
+ tháng_năm
1302
+ tháng_tháng
1303
+ thêm
1304
+ thêm_chuyện
1305
+ thêm_giờ
1306
+ thêm_vào
1307
+ thì
1308
+ thì_giờ
1309
+ thì_là
1310
+ thì_phải
1311
+ thì_ra
1312
+ thì_thôi
1313
+ thình_lình
1314
+ thích
1315
+ thích_cứ
1316
+ thích_thuộc
1317
+ thích_tự
1318
+ thích_ý
1319
+ thím
1320
+ thôi
1321
+ thôi_việc
1322
+ thúng_thắng
1323
+ thương_ôi
1324
+ thường
1325
+ thường_bị
1326
+ thường_hay
1327
+ thường_khi
1328
+ thường_số
1329
+ thường_sự
1330
+ thường_thôi
1331
+ thường_thường
1332
+ thường_tính
1333
+ thường_tại
1334
+ thường_xuất_hiện
1335
+ thường_đến
1336
+ thảo_hèn
1337
+ thảo_nào
1338
+ thấp
1339
+ thấp_cơ
1340
+ thấp_thỏm
1341
+ thấp_xuống
1342
+ thấy
1343
+ thấy_tháng
1344
+ thẩy
1345
+ thậm
1346
+ thậm_chí
1347
+ thậm_cấp
1348
+ thậm_từ
1349
+ thật
1350
+ thật_chắc
1351
+ thật_là
1352
+ thật_lực
1353
+ thật_quả
1354
+ thật_ra
1355
+ thật_sự
1356
+ thật_thà
1357
+ thật_tốt
1358
+ thật_vậy
1359
+ thế
1360
+ thế_chuẩn_bị
1361
+ thế_là
1362
+ thế_lại
1363
+ thế_mà
1364
+ thế_nào
1365
+ thế_nên
1366
+ thế_ra
1367
+ thế_sự
1368
+ thế_thì
1369
+ thế_thôi
1370
+ thế_thường
1371
+ thế_thế
1372
+ thế_à
1373
+ thế_đó
1374
+ thếch
1375
+ thỉnh_thoảng
1376
+ thỏm
1377
+ thốc
1378
+ thốc_tháo
1379
+ thốt
1380
+ thốt_nhiên
1381
+ thốt_nói
1382
+ thốt_thôi
1383
+ thộc
1384
+ thời_gian
1385
+ thời_gian_sử_dụng
1386
+ thời_gian_tính
1387
+ thời_điểm
1388
+ thục_mạng
1389
+ thứ
1390
+ thứ_bản
1391
+ thứ_đến
1392
+ thửa
1393
+ thực_hiện
1394
+ thực_hiện_đúng
1395
+ thực_ra
1396
+ thực_sự
1397
+ thực_tế
1398
+ thực_vậy
1399
+ tin
1400
+ tin_thêm
1401
+ tin_vào
1402
+ tiếp_theo
1403
+ tiếp_tục
1404
+ tiếp_đó
1405
+ tiện_thể
1406
+ toà
1407
+ toé_khói
1408
+ toẹt
1409
+ trong
1410
+ trong_khi
1411
+ trong_lúc
1412
+ trong_mình
1413
+ trong_ngoài
1414
+ trong_này
1415
+ trong_số
1416
+ trong_vùng
1417
+ trong_đó
1418
+ trong_ấy
1419
+ tránh
1420
+ tránh_khỏi
1421
+ tránh_ra
1422
+ tránh_tình_trạng
1423
+ tránh_xa
1424
+ trên
1425
+ trên_bộ
1426
+ trên_dưới
1427
+ trước
1428
+ trước_hết
1429
+ trước_khi
1430
+ trước_kia
1431
+ trước_nay
1432
+ trước_ngày
1433
+ trước_nhất
1434
+ trước_sau
1435
+ trước_tiên
1436
+ trước_tuổi
1437
+ trước_đây
1438
+ trước_đó
1439
+ trả
1440
+ trả_của
1441
+ trả_lại
1442
+ trả_ngay
1443
+ trả_trước
1444
+ trếu_tráo
1445
+ trển
1446
+ trệt
1447
+ trệu_trạo
1448
+ trỏng
1449
+ trời_đất_ơi
1450
+ trở_thành
1451
+ trừ_phi
1452
+ trực_tiếp
1453
+ trực_tiếp_làm
1454
+ tuy
1455
+ tuy_có
1456
+ tuy_là
1457
+ tuy_nhiên
1458
+ tuy_rằng
1459
+ tuy_thế
1460
+ tuy_vậy
1461
+ tuy_đã
1462
+ tuyệt_nhiên
1463
+ tuần_tự
1464
+ tuốt_luốt
1465
+ tuốt_tuồn_tuột
1466
+ tuốt_tuột
1467
+ tuổi
1468
+ tuổi_cả
1469
+ tuổi_tôi
1470
+ tà_tà
1471
+ tên
1472
+ tên_chính
1473
+ tên_cái
1474
+ tên_họ
1475
+ tên_tự
1476
+ tênh
1477
+ tênh_tênh
1478
+ tìm
1479
+ tìm_bạn
1480
+ tìm_cách
1481
+ tìm_hiểu
1482
+ tìm_ra
1483
+ tình_trạng
1484
+ tính
1485
+ tính_căn
1486
+ tính_phỏng
1487
+ tính_từ
1488
+ tít_mù
1489
+ tò_te
1490
+ tôi
1491
+ tôi_con
1492
+ tông_tốc
1493
+ tù_tì
1494
+ tăm_tắp
1495
+ tăng
1496
+ tăng_chúng
1497
+ tăng_cấp
1498
+ tăng_giảm
1499
+ tăng_thêm
1500
+ tăng_thế
1501
+ tại
1502
+ tại_lòng
1503
+ tại_nơi
1504
+ tại_sao
1505
+ tại_tôi
1506
+ tại_vì
1507
+ tại_đâu
1508
+ tại_đây
1509
+ tại_đó
1510
+ tạo
1511
+ tạo_cơ_hội
1512
+ tạo_nên
1513
+ tạo_ra
1514
+ tạo_ý
1515
+ tạo_điều_kiện
1516
+ tấm
1517
+ tấm_bản
1518
+ tấm_các
1519
+ tấn
1520
+ tấn_tới
1521
+ tất_cả
1522
+ tất_cả_bao_nhiêu
1523
+ tất_thảy
1524
+ tất_tần_tật
1525
+ tất_tật
1526
+ tập_trung
1527
+ tắp
1528
+ tắp_lự
1529
+ tắp_tắp
1530
+ tọt
1531
+ tỏ_ra
1532
+ tỏ_vẻ
1533
+ tốc_tả
1534
+ tối_ư
1535
+ tốt
1536
+ tốt_bạn
1537
+ tốt_bộ
1538
+ tốt_hơn
1539
+ tốt_mối
1540
+ tốt_ngày
1541
+ tột
1542
+ tột_cùng
1543
+ tớ
1544
+ tới
1545
+ tới_gần
1546
+ tới_mức
1547
+ tới_nơi
1548
+ tới_thì
1549
+ tức_thì
1550
+ tức_tốc
1551
+ từ
1552
+ từ_căn
1553
+ từ_giờ
1554
+ từ_khi
1555
+ từ_loại
1556
+ từ_nay
1557
+ từ_thế
1558
+ từ_tính
1559
+ từ_tại
1560
+ từ_từ
1561
+ từ_ái
1562
+ từ_điều
1563
+ từ_đó
1564
+ từ_ấy
1565
+ từng
1566
+ từng_cái
1567
+ từng_giờ
1568
+ từng_nhà
1569
+ từng_phần
1570
+ từng_thời_gian
1571
+ từng_đơn_vị
1572
+ từng_ấy
1573
+ tự
1574
+ tự_cao
1575
+ tự_khi
1576
+ tự_lượng
1577
+ tự_tính
1578
+ tự_tạo
1579
+ tự_vì
1580
+ tự_ý
1581
+ tự_ăn
1582
+ tựu_trung
1583
+ veo
1584
+ veo_veo
1585
+ việc
1586
+ việc_gì
1587
+ vung_thiên_địa
1588
+ vung_tàn_tán
1589
+ vung_tán_tàn
1590
+
1591
+ vài
1592
+ vài_ba
1593
+ vài_người
1594
+ vài_nhà
1595
+ vài_nơi
1596
+ vài_tên
1597
+ vài_điều
1598
+ vào
1599
+ vào_gặp
1600
+ vào_khoảng
1601
+ vào_lúc
1602
+ vào_vùng
1603
+ vào_đến
1604
+ vâng
1605
+ vâng_chịu
1606
+ vâng_dạ
1607
+ vâng_vâng
1608
+ vâng_ý
1609
+ vèo
1610
+ vèo_vèo
1611
+
1612
+ vì_chưng
1613
+ vì_rằng
1614
+ vì_sao
1615
+ vì_thế
1616
+ vì_vậy
1617
+ ví_bằng
1618
+ ví_dù
1619
+ ví_phỏng
1620
+ ví_thử
1621
+ vô_hình_trung
1622
+ vô_kể
1623
+ vô_luận
1624
+ vô_vàn
1625
+ vùng
1626
+ vùng_lên
1627
+ vùng_nước
1628
+ văng_tê
1629
+ vượt
1630
+ vượt_khỏi
1631
+ vượt_quá
1632
+ vạn_nhất
1633
+ vả_chăng
1634
+ vả_lại
1635
+ vấn_đề
1636
+ vấn_đề_quan_trọng
1637
+ vẫn
1638
+ vẫn_thế
1639
+ vậy
1640
+ vậy_là
1641
+ vậy_mà
1642
+ vậy_nên
1643
+ vậy_ra
1644
+ vậy_thì
1645
+ vậy_ư
1646
+ về
1647
+ về_không
1648
+ về_phần
1649
+ về_sau
1650
+ về_tay
1651
+ vị_trí
1652
+ vị_tất
1653
+ vốn_dĩ
1654
+ với
1655
+ với_lại
1656
+ với_nhau
1657
+ vở
1658
+ vụt
1659
+ vừa
1660
+ vừa_khi
1661
+ vừa_lúc
1662
+ vừa_mới
1663
+ vừa_qua
1664
+ vừa_rồi
1665
+ vừa_vừa
1666
+ xa
1667
+ xa_cách
1668
+ xa_gần
1669
+ xa_nhà
1670
+ xa_tanh
1671
+ xa_tắp
1672
+ xa_xa
1673
+ xa_xả
1674
+ xem
1675
+ xem_lại
1676
+ xem_ra
1677
+ xem_số
1678
+ xin
1679
+ xin_gặp
1680
+ xin_vâng
1681
+ xiết_bao
1682
+ xon_xón
1683
+ xoành_xoạch
1684
+ xoét
1685
+ xoẳn
1686
+ xoẹt
1687
+ xuất_kì_bất_ý
1688
+ xuất_kỳ_bất_ý
1689
+ xuể
1690
+ xuống
1691
+ xăm_xúi
1692
+ xăm_xăm
1693
+ xăm_xắm
1694
+ xảy_ra
1695
+ xềnh_xệch
1696
+ xệp
1697
+ xử_lý
1698
+ yêu_cầu
1699
+ à
1700
+ à_này
1701
+ à_ơi
1702
+ ào
1703
+ ào_vào
1704
+ ào_ào
1705
+ á
1706
+ á_à
1707
+ ái
1708
+ ái_chà
1709
+ ái_dà
1710
+ áng
1711
+ áng_như
1712
+ âu_là
1713
+ ít
1714
+ ít_biết
1715
+ ít_có
1716
+ ít_hơn
1717
+ ít_khi
1718
+ ít_lâu
1719
+ ít_nhiều
1720
+ ít_nhất
1721
+ ít_nữa
1722
+ ít_quá
1723
+ ít_ra
1724
+ ít_thôi
1725
+ ít_thấy
1726
+ ô_hay
1727
+ ô_hô
1728
+ ô_kê
1729
+ ô_kìa
1730
+ ôi_chao
1731
+ ôi_thôi
1732
+ ông
1733
+ ông_nhỏ
1734
+ ông_tạo
1735
+ ông_từ
1736
+ ông_ấy
1737
+ ông_ổng
1738
+ úi
1739
+ úi_chà
1740
+ úi_dào
1741
+ ý
1742
+ ý_chừng
1743
+ ý_da
1744
+ ý_hoặc
1745
+ ăn
1746
+ ăn_chung
1747
+ ăn_chắc
1748
+ ăn_chịu
1749
+ ăn_cuộc
1750
+ ăn_hết
1751
+ ăn_hỏi
1752
+ ăn_làm
1753
+ ăn_người
1754
+ ăn_ngồi
1755
+ ăn_quá
1756
+ ăn_riêng
1757
+ ăn_tay
1758
+ ăn_trên
1759
+ ăn_về
1760
+ đang
1761
+ đang_tay
1762
+ đang_thì
1763
+ điều
1764
+ điều_gì
1765
+ điều_kiện
1766
+ điểm
1767
+ điểm_chính
1768
+ điểm_gặp
1769
+ điểm_đầu_tiên
1770
+ đành_đạch
1771
+ đáng
1772
+ đáng_kể
1773
+ đáng_lí
1774
+ đáng_lý
1775
+ đáng_lẽ
1776
+ đáng_số
1777
+ đánh_đùng
1778
+ đáo_để
1779
+ đâu
1780
+ đâu_có
1781
+ đâu_cũng
1782
+ đâu_như
1783
+ đâu_nào
1784
+ đâu_phải
1785
+ đâu_đâu
1786
+ đâu_đây
1787
+ đâu_đó
1788
+ đây
1789
+ đây_này
1790
+ đây_rồi
1791
+ đây_đó
1792
+ đã
1793
+ đã_hay
1794
+ đã_không
1795
+ đã_là
1796
+ đã_lâu
1797
+ đã_thế
1798
+ đã_vậy
1799
+ đã_đủ
1800
+ đó
1801
+ đó_đây
1802
+ đúng
1803
+ đúng_ngày
1804
+ đúng_ra
1805
+ đúng_tuổi
1806
+ đúng_với
1807
+ đơn_vị
1808
+ đưa
1809
+ đưa_cho
1810
+ đưa_chuyện
1811
+ đưa_em
1812
+ đưa_ra
1813
+ đưa_tay
1814
+ đưa_tin
1815
+ đưa_tới
1816
+ đưa_vào
1817
+ đưa_về
1818
+ đưa_xuống
1819
+ đưa_đến
1820
+ được
1821
+ được_cái
1822
+ được_lời
1823
+ được_nước
1824
+ được_tin
1825
+ đại_loại
1826
+ đại_phàm
1827
+ đại_để
1828
+ đạt
1829
+ đảm_bảo
1830
+ đầu_tiên
1831
+ đầy
1832
+ đầy_năm
1833
+ đầy_phè
1834
+ đầy_tuổi
1835
+ đặc_biệt
1836
+ đặt
1837
+ đặt_làm
1838
+ đặt_mình
1839
+ đặt_mức
1840
+ đặt_ra
1841
+ đặt_trước
1842
+ đặt_để
1843
+ đến
1844
+ đến_bao_giờ
1845
+ đến_cùng
1846
+ đến_cùng_cực
1847
+ đến_cả
1848
+ đến_giờ
1849
+ đến_gần
1850
+ đến_hay
1851
+ đến_khi
1852
+ đến_lúc
1853
+ đến_lời
1854
+ đến_nay
1855
+ đến_ngày
1856
+ đến_nơi
1857
+ đến_nỗi
1858
+ đến_thì
1859
+ đến_thế
1860
+ đến_tuổi
1861
+ đến_xem
1862
+ đến_điều
1863
+ đến_đâu
1864
+ đều
1865
+ đều_bước
1866
+ đều_nhau
1867
+ đều_đều
1868
+ để
1869
+ để_cho
1870
+ để_giống
1871
+ để_không
1872
+ để_lòng
1873
+ để_lại
1874
+ để_mà
1875
+ để_phần
1876
+ để_được
1877
+ để_đến_nỗi
1878
+ đối_với
1879
+ đồng_thời
1880
+ đủ
1881
+ đủ_dùng
1882
+ đủ_nơi
1883
+ đủ_số
1884
+ đủ_điều
1885
+ đủ_điểm
1886
+ ơ
1887
+ ơ_hay
1888
+ ơ_kìa
1889
+ ơi
1890
+ ơi_là
1891
+ ư
1892
+
1893
+ ạ_ơi
1894
+ ấy
1895
+ ấy_là
1896
+ ầu_ơ
1897
+ ắt
1898
+ ắt_hẳn
1899
+ ắt_là
1900
+ ắt_phải
1901
+ ắt_thật
1902
+ ối_dào
1903
+ ối_giời
1904
+ ối_giời_ơi
1905
+
1906
+ ồ_ồ
1907
+ ổng
1908
+
1909
+ ớ_này
1910
+
1911
+ ờ_ờ
1912
+
1913
+ ở_lại
1914
+ ở_như
1915
+ ở_nhờ
1916
+ ở_năm
1917
+ ở_trên
1918
+ ở_vào
1919
+ ở_đây
1920
+ ở_đó
1921
+ ở_được
1922
+ ủa
1923
+ ứ_hự
1924
+ ứ_ừ
1925
+
1926
+ ừ_nhé
1927
+ ừ_thì
1928
+ ừ_ào
1929
+ ừ_ừ
1930
+
1931
+ Chỉ
1932
+ Các
1933
+
1934
+ Cần
1935
+ Nhưng
1936
+ Tuy_nhiên
1937
+ Từ
1938
+ Cũng
1939
+ từ
1940
+ đi
1941
+ đến
1942
+ Cho_dù
1943
+ Chủ_yếu
1944
+ Còn
1945
+ Có_lẽ
1946
+ Có_thể
1947
+
1948
+ Dĩ_nhiên
1949
+ Những
1950
+
1951
+
1952
+ Tất_nhiên
1953
+ cho_dù
1954
+ có_lẽ
1955
+ lắm
1956
+ Hiện_nay
1957
+ Tại_đây
1958
+ Như_vậy
1959
+ Từ
1960
+ Vậy
1961
+
1962
+ Bởi
1963
+ Theo
1964
+ Trên
1965
+ Việc
1966
+ Do_đó
1967
+ Hơn_nữa
1968
+ Trong
1969
+ Bên
1970
+ Cùng
1971
+ Cả
1972
+ ây
1973
+ Khi
1974
+ Sau
1975
+ Mỗi
1976
+ Về
1977
+ Không_chỉ
1978
+ Mặc_dù
1979
+ mặc_dù
1980
+ Nhiều
1981
+ Như
1982
+ Do
1983
+ Nếu
1984
+ Nếu_như
1985
+ Hoặc
1986
+ Nhờ
1987
+ Hiện
1988
+ Hiện_tại
1989
+ hiện
1990
+ cạnh