Thao Pham commited on
Commit
6d139f1
1 Parent(s): 1019a9c

Adding Files

Browse files
.gitattributes CHANGED
@@ -33,3 +33,7 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ pretrained-models/phobert.pt filter=lfs diff=lfs merge=lfs -text
37
+ pretrained-models/ner-vietnamese-electra-base.pt filter=lfs diff=lfs merge=lfs -text
38
+ pretrained-models/vncorenlp/postagger/vi-tagger filter=lfs diff=lfs merge=lfs -text
39
+ pretrained-models/vncorenlp/VnCoreNLP-1.2.jar filter=lfs diff=lfs merge=lfs -text
.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/keybertvi-app.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 (keybertvi-app)" 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/keybertvi-app.iml" filepath="$PROJECT_DIR$/.idea/keybertvi-app.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>
app.py ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import torch
3
+ import os
4
+
5
+ from pipeline import KeywordExtractorPipeline
6
+
7
+ DIR_PATH = os.path.dirname(os.path.realpath(__file__))
8
+
9
+
10
+ def extract_keyword(title, text, top_n, ngram_low_range, ngram_high_range, min_freq, diversify_result):
11
+ # title = None
12
+ # keyword_ls = kw_model.extract_keywords(title, text, ngram_range=(ngram_low_range, ngram_high_range), top_n=top_n,
13
+ # min_freq=min_freq, use_kmeans=use_kmeans)
14
+ inp = {"text": text, "title": title}
15
+ keyword_ls = kw_pipeline(inputs=inp, min_freq=min_freq, ngram_n=(ngram_low_range, ngram_high_range),
16
+ top_n=top_n, diversify_result=diversify_result)
17
+ result = ''
18
+ for kw, score in keyword_ls:
19
+ result += f'{kw}: {score}\n'
20
+ return result
21
+
22
+
23
+ if gr.NO_RELOAD:
24
+ print("Loading PhoBERT model")
25
+ phobert = torch.load(f'{DIR_PATH}/pretrained-models/phobert.pt')
26
+ phobert.eval()
27
+
28
+ print("Loading NER model")
29
+ ner_model = torch.load(f'{DIR_PATH}/pretrained-models/ner-vietnamese-electra-base.pt')
30
+ ner_model.eval()
31
+ kw_pipeline = KeywordExtractorPipeline(phobert, ner_model)
32
+
33
+ if __name__ == "__main__":
34
+ demo = gr.Interface(fn=extract_keyword,
35
+ inputs=[
36
+ gr.Text(
37
+ label="Title",
38
+ lines=1,
39
+ value="Enter title here",
40
+ ),
41
+ gr.Textbox(
42
+ label="Text",
43
+ lines=5,
44
+ value="Enter text here",
45
+ ),
46
+ gr.Number(
47
+ label="Top N keywords",
48
+ info="Number of keywords retrieved",
49
+ value=5
50
+ ),
51
+ gr.Number(
52
+ label="Ngram low range",
53
+ value=1
54
+ ),
55
+ gr.Number(
56
+ label="Ngram high range",
57
+ value=3
58
+ ),
59
+ gr.Number(
60
+ label="Ngram minimum frequency",
61
+ value=1
62
+ ),
63
+ gr.Checkbox(
64
+ label="Diversify result"
65
+ )
66
+ ],
67
+ # inputs=["text", "textbox", "number", "number", "number", "number", "checkbox"],
68
+ outputs=gr.Textbox(
69
+ label="Keywords Extracted",
70
+ )
71
+ )
72
+
73
+ demo.launch(share=True) # Share your demo with just 1 extra parameter 🚀
model/keyword_extraction_utils.py ADDED
@@ -0,0 +1,264 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from string import punctuation
2
+ import numpy as np
3
+ import torch
4
+ from sklearn.cluster import KMeans
5
+ from model.named_entities import get_named_entities
6
+
7
+ punctuation = [c for c in punctuation if c != "_"]
8
+ punctuation += ["“", "–", ",", "…", "”", "–"]
9
+
10
+
11
+ ethnicity_dict_map = {"H'Mông": "HMông",
12
+ "H'mông": "HMông",
13
+ "H’mông": "HMông",
14
+ "H’Mông": "HMông",
15
+ "H’MÔNG": "HMông",
16
+ "M'Nông": "MNông",
17
+ "M'nông": "MNông",
18
+ "M'NÔNG": "MNông",
19
+ "M’Nông": "MNông",
20
+ "M’NÔNG": "MNông",
21
+ "K’Ho": "KHo",
22
+ "K’Mẻo": "KMẻo"}
23
+
24
+
25
+ def sub_sentence(sentence):
26
+ sent = []
27
+
28
+ start_index = 0
29
+ while start_index < len(sentence):
30
+ idx_list = []
31
+ for p in punctuation:
32
+ idx = sentence.find(p, start_index)
33
+ if idx != -1:
34
+ idx_list.append(idx)
35
+
36
+ if len(idx_list) == 0:
37
+ sent.append(sentence[start_index:].strip())
38
+ break
39
+
40
+ end_index = min(idx_list)
41
+
42
+ subsent = sentence[start_index:end_index].strip()
43
+ if len(subsent) > 0:
44
+ sent.append(subsent)
45
+
46
+ start_index = end_index + 1
47
+
48
+ return sent
49
+
50
+
51
+ def check_for_stopwords(ngram, stopwords_ls):
52
+ for ngram_elem in ngram.split():
53
+ for w in stopwords_ls:
54
+ if ngram_elem == w: # or ngram_elem.lower() == w:
55
+ return True
56
+ return False
57
+
58
+
59
+ def compute_ngram_list(segmentised_doc, ngram_n, stopwords_ls, subsentences=True):
60
+ if subsentences:
61
+ output_sub_sentences = []
62
+ for sentence in segmentised_doc:
63
+ output_sub_sentences += sub_sentence(sentence)
64
+ else:
65
+ output_sub_sentences = segmentised_doc
66
+
67
+ ngram_list = []
68
+ for sentence in output_sub_sentences:
69
+ sent = sentence.split()
70
+ for i in range(len(sent) - ngram_n + 1):
71
+ ngram = ' '.join(sent[i:i + ngram_n])
72
+ if ngram not in ngram_list and not check_for_stopwords(ngram, stopwords_ls):
73
+ ngram_list.append(ngram)
74
+
75
+ final_ngram_list = []
76
+ for ngram in ngram_list:
77
+ contains_number = False
78
+ for char in ngram:
79
+ if char.isnumeric():
80
+ contains_number = True
81
+ break
82
+ if not contains_number:
83
+ final_ngram_list.append(ngram)
84
+
85
+ return final_ngram_list
86
+
87
+
88
+ def cosine_similarity(a, b):
89
+ return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
90
+
91
+
92
+ def get_doc_embeddings(segmentised_doc, tokenizer, phobert, stopwords):
93
+ doc_embedding = torch.zeros(size=(len(segmentised_doc), 768))
94
+
95
+ for i, sentence in enumerate(segmentised_doc):
96
+ sent_removed_stopwords = ' '.join([word for word in sentence.split() if word not in stopwords])
97
+
98
+ sentence_embedding = tokenizer.encode(sent_removed_stopwords)
99
+ input_ids = torch.tensor([sentence_embedding])
100
+ with torch.no_grad():
101
+ features = phobert(input_ids)
102
+
103
+ if i == 0:
104
+ doc_embedding[i, :] = 2 * features.pooler_output.flatten()
105
+ else:
106
+ doc_embedding[i, :] = features.pooler_output.flatten()
107
+
108
+ return torch.mean(doc_embedding, axis=0)
109
+
110
+
111
+ def get_segmentised_doc(nlp, rdrsegmenter, title, doc):
112
+ for i, j in ethnicity_dict_map.items():
113
+ if title is not None:
114
+ title = title.replace(i, j)
115
+ doc = doc.replace(i, j)
116
+
117
+ segmentised_doc = rdrsegmenter.word_segment(doc)
118
+
119
+ if title is not None:
120
+ segmentised_doc = rdrsegmenter.word_segment(title) + rdrsegmenter.word_segment(doc)
121
+ print(segmentised_doc)
122
+ ne_ls = set(get_named_entities(nlp, doc))
123
+
124
+ segmentised_doc_ne = []
125
+ for sent in segmentised_doc:
126
+ for ne in ne_ls:
127
+ sent = sent.replace(ne, '_'.join(ne.split()))
128
+ segmentised_doc_ne.append(sent)
129
+ return ne_ls, segmentised_doc_ne
130
+
131
+
132
+ def compute_ngram_embeddings(tokenizer, phobert, ngram_list):
133
+ ngram_embeddings = {}
134
+
135
+ for ngram in ngram_list:
136
+ ngram_copy = ngram
137
+ if ngram.isupper():
138
+ ngram_copy = ngram.lower()
139
+ word_embedding = tokenizer.encode(ngram_copy)
140
+ input_ids = torch.tensor([word_embedding])
141
+ with torch.no_grad():
142
+ word_features = phobert(input_ids)
143
+
144
+ ngram_embeddings[ngram] = word_features.pooler_output
145
+ return ngram_embeddings
146
+
147
+
148
+ # def normalised_cosine_similarity(ngram_embedding, document_embedding):
149
+ # similarity_score = cosine_similarity(ngram_embedding, document_embedding)
150
+ # magnitude_ngram = np.linalg.norm(ngram_embedding)
151
+ # magnitude_doc = np.linalg.norm(document_embedding)
152
+ # return similarity_score / np.sqrt(magnitude_ngram * magnitude_doc)
153
+
154
+
155
+ def compute_ngram_similarity(ngram_list, ngram_embeddings, doc_embedding):
156
+ ngram_similarity_dict = {}
157
+
158
+ for ngram in ngram_list:
159
+ similarity_score = cosine_similarity(ngram_embeddings[ngram], doc_embedding.T).flatten()[0]
160
+ # similarity_score = normalised_cosine_similarity(ngram_embeddings[ngram], doc_embedding.T).flatten()[0]
161
+ ngram_similarity_dict[ngram] = similarity_score
162
+
163
+ return ngram_similarity_dict
164
+
165
+
166
+ def diversify_result_kmeans(ngram_result, ngram_embeddings, top_n=5):
167
+ best_ngrams = sorted(ngram_result, key=ngram_result.get, reverse=True)[:top_n * 4]
168
+ best_ngram_embeddings = np.array([ngram_embeddings[ngram] for ngram in best_ngrams]).squeeze()
169
+ vote = {}
170
+
171
+ for niter in range(100):
172
+ kmeans = KMeans(n_clusters=top_n, init='k-means++', random_state=niter * 2, n_init="auto").fit(
173
+ best_ngram_embeddings)
174
+ kmeans_result = kmeans.labels_
175
+
176
+ res = {}
177
+ for i in range(len(kmeans_result)):
178
+ if kmeans_result[i] not in res:
179
+ res[kmeans_result[i]] = []
180
+ res[kmeans_result[i]].append((best_ngrams[i], ngram_result[best_ngrams[i]]))
181
+
182
+ final_result = [res[k][0] for k in res]
183
+ for keyword in final_result:
184
+ if keyword not in vote:
185
+ vote[keyword] = 0
186
+ vote[keyword] += 1
187
+
188
+ diversify_result_ls = sorted(vote, key=vote.get, reverse=True)
189
+
190
+ return diversify_result_ls[:top_n]
191
+
192
+
193
+ def remove_duplicates(ngram_result):
194
+ to_remove = set()
195
+ for ngram in ngram_result:
196
+
197
+ for ngram2 in ngram_result:
198
+ if ngram not in to_remove and ngram != ngram2 and ngram.lower() == ngram2.lower():
199
+ new_score = np.mean([ngram_result[ngram], ngram_result[ngram2]])
200
+
201
+ ngram_result[ngram] = new_score
202
+ to_remove.add(ngram2)
203
+
204
+ for ngram in to_remove:
205
+ ngram_result.pop(ngram)
206
+ return ngram_result
207
+
208
+
209
+ def compute_filtered_text(annotator, title, text):
210
+ annotated = annotator.annotate_text(text)
211
+ if title is not None:
212
+ annotated = annotator.annotate_text(title + '. ' + text)
213
+ filtered_sentences = []
214
+ keep_tags = ['N', 'Np', 'V']
215
+ for key in annotated.keys():
216
+ sent = ' '.join([dict_['wordForm'] for dict_ in annotated[key] if dict_['posTag'] in keep_tags])
217
+ filtered_sentences.append(sent)
218
+ return filtered_sentences
219
+
220
+
221
+ def get_candidate_ngrams(segmentised_doc, filtered_segmentised_doc, ngram_n, stopwords_ls):
222
+ # get actual ngrams
223
+ # segmentised_doc = get_segmentised_doc(nlp, annotator, title, text)
224
+ actual_ngram_list = compute_ngram_list(segmentised_doc, ngram_n, stopwords_ls, subsentences=True)
225
+
226
+ # get filtered ngrams
227
+ # filtered_segmentised_doc = compute_filtered_text(annotator, title, text)
228
+ filtered_ngram_list = compute_ngram_list(filtered_segmentised_doc, ngram_n, stopwords_ls,
229
+ subsentences=False)
230
+
231
+ # get candiate ngrams
232
+ candidate_ngram = [ngram for ngram in filtered_ngram_list if ngram in actual_ngram_list]
233
+ return candidate_ngram
234
+
235
+
236
+ def limit_minimum_frequency(doc_segmentised, ngram_list, min_freq=1):
237
+ ngram_dict_freq = {}
238
+ for ngram in ngram_list:
239
+ ngram_n = len(ngram.split())
240
+ count = 0
241
+ for sentence in doc_segmentised:
242
+ sent = sentence.split()
243
+ for i in range(len(sent) - ngram_n + 1):
244
+ pair = ' '.join(sent[i:i + ngram_n])
245
+ if pair == ngram:
246
+ count += 1
247
+ if count >= min_freq:
248
+ ngram_dict_freq[ngram] = count
249
+
250
+ return ngram_dict_freq
251
+
252
+
253
+ def remove_overlapping_ngrams(ngram_list):
254
+ to_remove = set()
255
+ for ngram1 in ngram_list:
256
+ for ngram2 in ngram_list:
257
+ if len(ngram1.split()) > len(ngram2.split()) and (ngram1.startswith(ngram2) or ngram1.endswith(ngram2)):
258
+ # print(ngram1, ngram2)
259
+ # print()
260
+ to_remove.add(ngram2)
261
+
262
+ for kw in to_remove:
263
+ ngram_list.remove(kw)
264
+ return ngram_list
model/named_entities.py ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from underthesea import sent_tokenize
2
+
3
+
4
+ def substring(w, ls):
5
+ for w2 in ls:
6
+ if w != w2 and w in w2:
7
+ return True
8
+ return False
9
+
10
+
11
+ def get_ner_phrases(sent_ner_result):
12
+ ner_list = []
13
+ current_ner = [sent_ner_result[0]["word"]]
14
+ current_idx = sent_ner_result[0]["index"]
15
+ for i in range(1, len(sent_ner_result)):
16
+ if sent_ner_result[i]["index"] == current_idx + 1:
17
+ current_ner.append(sent_ner_result[i]["word"])
18
+ else:
19
+ ner_list.append((' '.join(current_ner), sent_ner_result[i - 1]['entity']))
20
+ current_ner = [sent_ner_result[i]["word"]]
21
+
22
+ current_idx = sent_ner_result[i]["index"]
23
+
24
+ ner_list.append((' '.join(current_ner), sent_ner_result[len(sent_ner_result) - 1]['entity']))
25
+ return ner_list
26
+
27
+
28
+ def get_named_entities(nlp, doc):
29
+ ner_lists = []
30
+ for sent in sent_tokenize(doc):
31
+ sent_ner_result = nlp(sent)
32
+ if len(sent_ner_result) > 0:
33
+ ner_lists += get_ner_phrases(sent_ner_result)
34
+
35
+ # print(ner_lists)
36
+
37
+ ner_list_non_dup = []
38
+ for (entity, ner_type) in ner_lists:
39
+ if entity not in ner_list_non_dup and ner_type.startswith('I'):
40
+ ner_list_non_dup.append(entity)
41
+
42
+ ner_list_final = [w.replace(" ##", "") for w in ner_list_non_dup if not substring(w, ner_list_non_dup)]
43
+ return ner_list_final
model/process_text.py ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from string import punctuation
2
+
3
+
4
+ def process_text_pipeline(text):
5
+ full_text_processed = replace_all(text.strip())
6
+
7
+ while '\n\n' in full_text_processed:
8
+ full_text_processed = full_text_processed.replace('\n\n', '\n')
9
+
10
+ full_text_processed = process_sticking_sentences(full_text_processed)
11
+
12
+ while ' ' in full_text_processed:
13
+ full_text_processed = full_text_processed.replace(' ', ' ')
14
+ return full_text_processed
15
+
16
+
17
+ def replace_all(text):
18
+ dict_map = {
19
+ "òa": "oà",
20
+ "Òa": "Oà",
21
+ "ÒA": "OÀ",
22
+ "óa": "oá",
23
+ "Óa": "Oá",
24
+ "ÓA": "OÁ",
25
+ "ỏa": "oả",
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
+ "òe": "oè",
35
+ "Òe": "Oè",
36
+ "ÒE": "OÈ",
37
+ "óe": "oé",
38
+ "Óe": "Oé",
39
+ "ÓE": "OÉ",
40
+ "ỏe": "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
+ "ùy": "uỳ",
50
+ "Ùy": "Uỳ",
51
+ "ÙY": "UỲ",
52
+ "úy": "uý",
53
+ "Úy": "Uý",
54
+ "ÚY": "UÝ",
55
+ "ủy": "uỷ",
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
+ "\xa0": " ",
65
+ "…": "...",
66
+ "''": '"',
67
+ "&#34;": '"',
68
+ "&#39;": "'",
69
+ "H'Mông": "Hmông",
70
+ "H'mông": "Hmông",
71
+ "H’mông": "Hmông",
72
+ "H’Mông": "Hmông",
73
+ "H’MÔNG": "Hmông",
74
+ "M'Nông": "Mnông",
75
+ "M'nông": "Mnông",
76
+ "M'NÔNG": "Mnông",
77
+ "M’Nông": "Mnông",
78
+ "M’NÔNG": "Mnông",
79
+ '\u200b\u200b': ""
80
+ }
81
+ for i, j in dict_map.items():
82
+ text = text.replace(i, j)
83
+ return text
84
+
85
+
86
+ def process_sticking_sentences(full_text):
87
+ for i in range(len(full_text) - 1):
88
+ c1 = full_text[i]
89
+ c2 = full_text[i + 1]
90
+
91
+ # 'end of sentence.Start'
92
+ if c1 in punctuation and c2.isalpha() and c2.isupper():
93
+ before = full_text[:i + 1]
94
+ after = full_text[i + 1:]
95
+
96
+ full_text = before + " " + after
97
+
98
+ # 'end of sentenceStart'
99
+ if c1.isalpha() and c1.islower() 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
+ return full_text
pipeline.py ADDED
@@ -0,0 +1,135 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import py_vncorenlp
2
+ from transformers import AutoTokenizer, Pipeline, pipeline
3
+ import os
4
+
5
+ from model.keyword_extraction_utils import *
6
+ from model.process_text import process_text_pipeline
7
+
8
+ dir_path = os.path.dirname(os.path.realpath(__file__))
9
+
10
+
11
+ class KeywordExtractorPipeline(Pipeline):
12
+ def __init__(self, model, ner_model, **kwargs):
13
+ super().__init__(model, **kwargs)
14
+ self.annotator = py_vncorenlp.VnCoreNLP(annotators=["wseg", "pos"],
15
+ save_dir=f'{dir_path}/pretrained-models/vncorenlp')
16
+ # model = py_vncorenlp.VnCoreNLP(save_dir='/absolute/path/to/vncorenlp')
17
+ print("Loading PhoBERT tokenizer")
18
+ self.phobert_tokenizer = AutoTokenizer.from_pretrained("vinai/phobert-base-v2")
19
+
20
+ # use absolute path because torch is cached
21
+ # self.phobert = torch.load(f'{dir_path}/pretrained-models/phobert.pt')
22
+ # self.phobert.eval()
23
+ self.phobert = model
24
+
25
+ print("Loading NER tokenizer")
26
+ ner_tokenizer = AutoTokenizer.from_pretrained("NlpHUST/ner-vietnamese-electra-base")
27
+ # ner_model = torch.load(f'{dir_path}/pretrained-models/ner-vietnamese-electra-base.pt')
28
+ # ner_model.eval()
29
+ self.ner_pipeline = pipeline("ner", model=ner_model, tokenizer=ner_tokenizer)
30
+
31
+ stopwords_file_path = f'{dir_path}/vietnamese-stopwords-dash.txt'
32
+ with open(stopwords_file_path) as f:
33
+ self.stopwords = [w.strip() for w in f.readlines()]
34
+
35
+ def _sanitize_parameters(self, **kwargs):
36
+ preprocess_kwargs = {}
37
+ forward_kwargs = {}
38
+ postprocess_kwargs = {}
39
+
40
+ for possible_preprocess_kwarg in ["text", "title"]:
41
+ if possible_preprocess_kwarg in kwargs:
42
+ preprocess_kwargs[possible_preprocess_kwarg] = kwargs[possible_preprocess_kwarg]
43
+
44
+ for possible_forward_kwarg in ["ngram_n", "min_freq"]:
45
+ if possible_forward_kwarg in kwargs:
46
+ forward_kwargs[possible_forward_kwarg] = kwargs[possible_forward_kwarg]
47
+
48
+ for possible_postprocess_kwarg in ["top_n", "diversify_result"]:
49
+ if possible_postprocess_kwarg in kwargs:
50
+ postprocess_kwargs[possible_postprocess_kwarg] = kwargs[possible_postprocess_kwarg]
51
+
52
+ # print(forward_kwargs)
53
+ # print(postprocess_kwargs)
54
+ return preprocess_kwargs, forward_kwargs, postprocess_kwargs
55
+
56
+ def preprocess(self, inputs):
57
+ title = None
58
+ if inputs['title']:
59
+ title = process_text_pipeline(inputs['title'])
60
+ text = process_text_pipeline(inputs['text'])
61
+ return {"text": text, "title": title}#, "ngram_n": inputs["ngram_n"], "min_freq":inputs["min_freq"]}
62
+
63
+ def _forward(self, model_inputs, ngram_n, min_freq):
64
+ text = model_inputs['text']
65
+ title = model_inputs['title']
66
+ # ngram_n = model_inputs['ngram_n']
67
+ # min_freq = model_inputs['min_freq']
68
+
69
+ # Getting segmentised document
70
+ ne_ls, doc_segmentised = get_segmentised_doc(self.ner_pipeline, self.annotator, title, text)
71
+ print(ne_ls)
72
+ filtered_doc_segmentised = compute_filtered_text(self.annotator, title, text)
73
+
74
+ doc_embedding = get_doc_embeddings(filtered_doc_segmentised, self.phobert_tokenizer, self.phobert,
75
+ self.stopwords)
76
+
77
+ ngram_list = self.generate_ngram_list(doc_segmentised, filtered_doc_segmentised, ne_ls, ngram_n, min_freq)
78
+ print(sorted(ngram_list))
79
+
80
+ ngram_embeddings = compute_ngram_embeddings(self.phobert_tokenizer, self.phobert, ngram_list)
81
+
82
+ return {"ngram_list": ngram_list, "ngram_embeddings": ngram_embeddings, "doc_embedding": doc_embedding}
83
+
84
+ def postprocess(self, model_outputs, top_n, diversify_result):
85
+ ngram_list = model_outputs['ngram_list']
86
+ ngram_embeddings = model_outputs['ngram_embeddings']
87
+ doc_embedding = model_outputs['doc_embedding']
88
+
89
+ ngram_result = self.extract_keywords(doc_embedding, ngram_list, ngram_embeddings)
90
+ non_diversified = sorted([(ngram, ngram_result[ngram]) for ngram in ngram_result],
91
+ key=lambda x: x[1], reverse=True)[:top_n]
92
+
93
+ if diversify_result:
94
+ return diversify_result_kmeans(ngram_result, ngram_embeddings, top_n=top_n)
95
+ return non_diversified
96
+
97
+ def generate_ngram_list(self, doc_segmentised, filtered_doc_segmentised, ne_ls, ngram_n, min_freq):
98
+ ngram_low, ngram_high = ngram_n
99
+
100
+ # Adding ngram
101
+ ngram_list = set()
102
+ for n in range(ngram_low, ngram_high + 1):
103
+ ngram_list.update(get_candidate_ngrams(doc_segmentised, filtered_doc_segmentised, n, self.stopwords))
104
+
105
+ # Adding named entities ngram list
106
+ ngram_list.update([self.annotator.word_segment(ne)[0] for ne in ne_ls])
107
+
108
+ # Removing overlapping ngrams
109
+ ngram_list = remove_overlapping_ngrams(ngram_list)
110
+
111
+ # Limit ngrams by minimum frequency
112
+ ngram_list = limit_minimum_frequency(doc_segmentised, ngram_list, min_freq=min_freq)
113
+ return ngram_list.keys()
114
+
115
+ def extract_keywords(self, doc_embedding, ngram_list, ngram_embeddings):
116
+ ngram_result = compute_ngram_similarity(ngram_list, ngram_embeddings, doc_embedding)
117
+ ngram_result = remove_duplicates(ngram_result)
118
+ return ngram_result
119
+
120
+
121
+ if __name__ == "__main__":
122
+
123
+ phobert = torch.load(f'{dir_path}/pretrained-models/phobert.pt')
124
+ phobert.eval()
125
+ ner_model = torch.load(f'{dir_path}/pretrained-models/ner-vietnamese-electra-base.pt')
126
+ ner_model.eval()
127
+ kw_pipeline = KeywordExtractorPipeline(phobert, ner_model)
128
+
129
+ text_file_path = f'{dir_path}/test_file.txt'
130
+ with open(text_file_path, 'r') as f:
131
+ text = ' '.join([ln.strip() for ln in f.readlines()])
132
+
133
+ inp = {"text": text,"title": None}
134
+ kws = kw_pipeline(inputs=inp, min_freq=1, ngram_n=(1,3), top_n=5, diversify_result=False)
135
+ print(kws)
requirements.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ torch
2
+ transformers
3
+ gradio
4
+ scikit-learn
5
+ numpy
6
+ underthesea
7
+ py_vncorenlp
vietnamese-stopwords-dash.txt ADDED
@@ -0,0 +1,1998 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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_thứ
872
+ ngõ_hầu
873
+ ngăn_ngắt
874
+ ngươi
875
+ người_hỏi
876
+ người_khác
877
+ người_khách
878
+ người_mình
879
+ người_nghe
880
+ người_người
881
+ người_nhận
882
+ ngọn
883
+ ngọn_nguồn
884
+ ngọt
885
+ ngồi
886
+ ngồi_bệt
887
+ ngồi_không
888
+ ngồi_sau
889
+ ngồi_trệt
890
+ ngộ_nhỡ
891
+ nhanh
892
+ nhanh_lên
893
+ nhanh_tay
894
+ nhau
895
+ nhiên_hậu
896
+ nhiều
897
+ nhiều_ít
898
+ nhiệt_liệt
899
+ nhung_nhăng
900
+ nhà
901
+ nhà_chung
902
+ nhà_khó
903
+ nhà_làm
904
+ nhà_ngoài
905
+ nhà_ngươi
906
+ nhà_tôi
907
+ nhà_việc
908
+ nhân_dịp
909
+ nhân_tiện
910
+ nhé
911
+ nhìn
912
+ nhìn_chung
913
+ nhìn_lại
914
+ nhìn_nhận
915
+ nhìn_theo
916
+ nhìn_thấy
917
+ nhìn_xuống
918
+ nhóm
919
+ nhón_nhén
920
+ như
921
+ như_ai
922
+ như_chơi
923
+ như_không
924
+ như_là
925
+ như_nhau
926
+ như_quả
927
+ như_sau
928
+ như_thường
929
+ như_thế
930
+ như_thế_nào
931
+ như_thể
932
+ như_trên
933
+ như_trước
934
+ như_tuồng
935
+ như_vậy
936
+ như_ý
937
+ nhưng
938
+ nhưng_mà
939
+ nhược_bằng
940
+ nhất
941
+ nhất_loạt
942
+ nhất_luật
943
+ nhất_là
944
+ nhất_mực
945
+ nhất_nhất
946
+ nhất_quyết
947
+ nhất_sinh
948
+ nhất_thiết
949
+ nhất_thì
950
+ nhất_tâm
951
+ nhất_tề
952
+ nhất_đán
953
+ nhất_định
954
+ nhận
955
+ nhận_biết
956
+ nhận_họ
957
+ nhận_làm
958
+ nhận_nhau
959
+ nhận_ra
960
+ nhận_thấy
961
+ nhận_việc
962
+ nhận_được
963
+ nhằm
964
+ nhằm_khi
965
+ nhằm_lúc
966
+ nhằm_vào
967
+ nhằm_để
968
+ nhỉ
969
+ nhỏ
970
+ nhỏ_người
971
+ nhớ
972
+ nhớ_bập_bõm
973
+ nhớ_lại
974
+ nhớ_lấy
975
+ nhớ_ra
976
+ nhờ
977
+ nhờ_chuyển
978
+ nhờ_có
979
+ nhờ_nhờ
980
+ nhờ_đó
981
+ nhỡ_ra
982
+ những
983
+ những_ai
984
+ những_khi
985
+ những_là
986
+ những_lúc
987
+ những_muốn
988
+ những_như
989
+ nào
990
+ nào_cũng
991
+ nào_hay
992
+ nào_là
993
+ nào_phải
994
+ nào_đâu
995
+ nào_đó
996
+ này
997
+ này_nọ
998
+ nên
999
+ nên_chi
1000
+ nên_chăng
1001
+ nên_làm
1002
+ nên_người
1003
+ nên_tránh
1004
+
1005
+ nóc
1006
+ nói
1007
+ nói_bông
1008
+ nói_chung
1009
+ nói_khó
1010
+ nói_là
1011
+ nói_lên
1012
+ nói_lại
1013
+ nói_nhỏ
1014
+ nói_phải
1015
+ nói_qua
1016
+ nói_ra
1017
+ nói_riêng
1018
+ nói_rõ
1019
+ nói_thêm
1020
+ nói_thật
1021
+ nói_toẹt
1022
+ nói_trước
1023
+ nói_tốt
1024
+ nói_với
1025
+ nói_xa
1026
+ nói_ý
1027
+ nói_đến
1028
+ nói_đủ
1029
+ năm
1030
+ năm_tháng
1031
+ nơi
1032
+ nơi_nơi
1033
+ nước_bài
1034
+ nước_cùng
1035
+ nước_lên
1036
+ nước_nặng
1037
+ nước_quả
1038
+ nước_xuống
1039
+ nước_ăn
1040
+ nước_đến
1041
+ nấy
1042
+ nặng
1043
+ nặng_căn
1044
+ nặng_mình
1045
+ nặng_về
1046
+ nếu
1047
+ nếu_có
1048
+ nếu_cần
1049
+ nếu_không
1050
+ nếu_mà
1051
+ nếu_như
1052
+ nếu_thế
1053
+ nếu_vậy
1054
+ nếu_được
1055
+ nền
1056
+ nọ
1057
+ nớ
1058
+ nức_nở
1059
+ nữa
1060
+ nữa_khi
1061
+ nữa_là
1062
+ nữa_rồi
1063
+ oai_oái
1064
+ oái
1065
+ pho
1066
+ phè
1067
+ phè_phè
1068
+ phía
1069
+ phía_bên
1070
+ phía_bạn
1071
+ phía_dưới
1072
+ phía_sau
1073
+ phía_trong
1074
+ phía_trên
1075
+ phía_trước
1076
+ phóc
1077
+ phót
1078
+ phù_hợp
1079
+ phăn_phắt
1080
+ phương_chi
1081
+ phải
1082
+ phải_biết
1083
+ phải_chi
1084
+ phải_chăng
1085
+ phải_cách
1086
+ phải_cái
1087
+ phải_giờ
1088
+ phải_khi
1089
+ phải_không
1090
+ phải_lại
1091
+ phải_lời
1092
+ phải_người
1093
+ phải_như
1094
+ phải_rồi
1095
+ phải_tay
1096
+ phần
1097
+ phần_lớn
1098
+ phần_nhiều
1099
+ phần_nào
1100
+ phần_sau
1101
+ phần_việc
1102
+ phắt
1103
+ phỉ_phui
1104
+ phỏng
1105
+ phỏng_như
1106
+ phỏng_nước
1107
+ phỏng_theo
1108
+ phỏng_tính
1109
+ phốc
1110
+ phụt
1111
+ phứt
1112
+ qua
1113
+ qua_chuyện
1114
+ qua_khỏi
1115
+ qua_lại
1116
+ qua_lần
1117
+ qua_ngày
1118
+ qua_tay
1119
+ qua_thì
1120
+ qua_đi
1121
+ quan_trọng
1122
+ quan_trọng_vấn_đề
1123
+ quan_tâm
1124
+ quay
1125
+ quay_bước
1126
+ quay_lại
1127
+ quay_số
1128
+ quay_đi
1129
+ quá
1130
+ quá_bán
1131
+ quá_bộ
1132
+ quá_giờ
1133
+ quá_lời
1134
+ quá_mức
1135
+ quá_nhiều
1136
+ quá_tay
1137
+ quá_thì
1138
+ quá_tin
1139
+ quá_trình
1140
+ quá_tuổi
1141
+ quá_đáng
1142
+ quá_ư
1143
+ quả
1144
+ quả_là
1145
+ quả_thật
1146
+ quả_thế
1147
+ quả_vậy
1148
+ quận
1149
+ ra
1150
+ ra_bài
1151
+ ra_bộ
1152
+ ra_chơi
1153
+ ra_gì
1154
+ ra_lại
1155
+ ra_lời
1156
+ ra_ngôi
1157
+ ra_người
1158
+ ra_sao
1159
+ ra_tay
1160
+ ra_vào
1161
+ ra_ý
1162
+ ra_điều
1163
+ ra_đây
1164
+ ren_rén
1165
+ riu_ríu
1166
+ riêng
1167
+ riêng_từng
1168
+ riệt
1169
+ rày
1170
+ ráo
1171
+ ráo_cả
1172
+ ráo_nước
1173
+ ráo_trọi
1174
+ rén
1175
+ rén_bước
1176
+ rích
1177
+ rón_rén
1178
+
1179
+ rõ_là
1180
+ rõ_thật
1181
+ rút_cục
1182
+ răng
1183
+ răng_răng
1184
+ rất
1185
+ rất_lâu
1186
+ rằng
1187
+ rằng_là
1188
+ rốt_cuộc
1189
+ rốt_cục
1190
+ rồi
1191
+ rồi_nữa
1192
+ rồi_ra
1193
+ rồi_sao
1194
+ rồi_sau
1195
+ rồi_tay
1196
+ rồi_thì
1197
+ rồi_xem
1198
+ rồi_đây
1199
+ rứa
1200
+ sa_sả
1201
+ sang
1202
+ sang_năm
1203
+ sang_sáng
1204
+ sang_tay
1205
+ sao
1206
+ sao_bản
1207
+ sao_bằng
1208
+ sao_cho
1209
+ sao_vậy
1210
+ sao_đang
1211
+ sau
1212
+ sau_chót
1213
+ sau_cuối
1214
+ sau_cùng
1215
+ sau_hết
1216
+ sau_này
1217
+ sau_nữa
1218
+ sau_sau
1219
+ sau_đây
1220
+ sau_đó
1221
+ so
1222
+ so_với
1223
+ song_le
1224
+ suýt
1225
+ suýt_nữa
1226
+ sáng
1227
+ sáng_ngày
1228
+ sáng_rõ
1229
+ sáng_thế
1230
+ sáng_ý
1231
+
1232
+ sì_sì
1233
+ sất
1234
+ sắp
1235
+ sắp_đặt
1236
+ sẽ
1237
+ sẽ_biết
1238
+ sẽ_hay
1239
+ số
1240
+ số_cho_biết
1241
+ số_cụ_thể
1242
+ số_loại
1243
+ số_là
1244
+ số_phần
1245
+ số_thiếu
1246
+ sốt_sột
1247
+ sớm
1248
+ sớm_ngày
1249
+ sở_dĩ
1250
+ sử_dụng
1251
+ sự
1252
+ sự_thế
1253
+ sự_việc
1254
+ tanh
1255
+ tanh_tanh
1256
+ tay
1257
+ tay_quay
1258
+ tha_hồ
1259
+ tha_hồ_chơi
1260
+ tha_hồ_ăn
1261
+ than_ôi
1262
+ thanh
1263
+ thanh_ba
1264
+ thanh_chuyển
1265
+ thanh_không
1266
+ thanh_thanh
1267
+ thanh_tính
1268
+ thanh_điều_kiện
1269
+ thanh_điểm
1270
+ thay_đổi
1271
+ thay_đổi_tình_trạng
1272
+ theo
1273
+ theo_bước
1274
+ theo_như
1275
+ theo_tin
1276
+ thi_thoảng
1277
+ thiếu
1278
+ thiếu_gì
1279
+ thiếu_điểm
1280
+ thoạt
1281
+ thoạt_nghe
1282
+ thoạt_nhiên
1283
+ thoắt
1284
+ thuần
1285
+ thuần_ái
1286
+ thuộc
1287
+ thuộc_bài
1288
+ thuộc_cách
1289
+ thuộc_lại
1290
+ thuộc_từ
1291
+ thà
1292
+ thà_là
1293
+ thà_rằng
1294
+ thành_ra
1295
+ thành_thử
1296
+ thái_quá
1297
+ tháng
1298
+ tháng_ngày
1299
+ tháng_năm
1300
+ tháng_tháng
1301
+ thêm
1302
+ thêm_chuyện
1303
+ thêm_giờ
1304
+ thêm_vào
1305
+ thì
1306
+ thì_giờ
1307
+ thì_là
1308
+ thì_phải
1309
+ thì_ra
1310
+ thì_thôi
1311
+ thình_lình
1312
+ thích
1313
+ thích_cứ
1314
+ thích_thuộc
1315
+ thích_tự
1316
+ thích_ý
1317
+ thím
1318
+ thôi
1319
+ thôi_việc
1320
+ thúng_thắng
1321
+ thương_ôi
1322
+ thường
1323
+ thường_bị
1324
+ thường_hay
1325
+ thường_khi
1326
+ thường_số
1327
+ thường_sự
1328
+ thường_thôi
1329
+ thường_thường
1330
+ thường_tính
1331
+ thường_tại
1332
+ thường_xuất_hiện
1333
+ thường_đến
1334
+ thảo_hèn
1335
+ thảo_nào
1336
+ thấp
1337
+ thấp_cơ
1338
+ thấp_thỏm
1339
+ thấp_xuống
1340
+ thấy
1341
+ thấy_tháng
1342
+ thẩy
1343
+ thậm
1344
+ thậm_chí
1345
+ thậm_cấp
1346
+ thậm_từ
1347
+ thật
1348
+ thật_chắc
1349
+ thật_là
1350
+ thật_lực
1351
+ thật_quả
1352
+ thật_ra
1353
+ thật_sự
1354
+ thật_thà
1355
+ thật_tốt
1356
+ thật_vậy
1357
+ thế
1358
+ thế_chuẩn_bị
1359
+ thế_là
1360
+ thế_lại
1361
+ thế_mà
1362
+ thế_nào
1363
+ thế_nên
1364
+ thế_ra
1365
+ thế_sự
1366
+ thế_thì
1367
+ thế_thôi
1368
+ thế_thường
1369
+ thế_thế
1370
+ thế_à
1371
+ thế_đó
1372
+ thếch
1373
+ thỉnh_thoảng
1374
+ thỏm
1375
+ thốc
1376
+ thốc_tháo
1377
+ thốt
1378
+ thốt_nhiên
1379
+ thốt_nói
1380
+ thốt_thôi
1381
+ thộc
1382
+ thời_gian
1383
+ thời_gian_sử_dụng
1384
+ thời_gian_tính
1385
+ thời_điểm
1386
+ thục_mạng
1387
+ thứ
1388
+ thứ_bản
1389
+ thứ_đến
1390
+ thửa
1391
+ thực_hiện
1392
+ thực_hiện_đúng
1393
+ thực_ra
1394
+ thực_sự
1395
+ thực_tế
1396
+ thực_vậy
1397
+ tin
1398
+ tin_thêm
1399
+ tin_vào
1400
+ tiếp_theo
1401
+ tiếp_tục
1402
+ tiếp_đó
1403
+ tiện_thể
1404
+ toà
1405
+ toé_khói
1406
+ toẹt
1407
+ trong
1408
+ trong_khi
1409
+ trong_lúc
1410
+ trong_mình
1411
+ trong_ngoài
1412
+ trong_này
1413
+ trong_số
1414
+ trong_vùng
1415
+ trong_đó
1416
+ trong_ấy
1417
+ tránh
1418
+ tránh_khỏi
1419
+ tránh_ra
1420
+ tránh_tình_trạng
1421
+ tránh_xa
1422
+ trên
1423
+ trên_bộ
1424
+ trên_dưới
1425
+ trước
1426
+ trước_hết
1427
+ trước_khi
1428
+ trước_kia
1429
+ trước_nay
1430
+ trước_ngày
1431
+ trước_nhất
1432
+ trước_sau
1433
+ trước_tiên
1434
+ trước_tuổi
1435
+ trước_đây
1436
+ trước_đó
1437
+ trả
1438
+ trả_của
1439
+ trả_lại
1440
+ trả_ngay
1441
+ trả_trước
1442
+ trếu_tráo
1443
+ trển
1444
+ trệt
1445
+ trệu_trạo
1446
+ trỏng
1447
+ trời_đất_ơi
1448
+ trở_thành
1449
+ trừ_phi
1450
+ trực_tiếp
1451
+ trực_tiếp_làm
1452
+ tuy
1453
+ tuy_có
1454
+ tuy_là
1455
+ tuy_nhiên
1456
+ tuy_rằng
1457
+ tuy_thế
1458
+ tuy_vậy
1459
+ tuy_đã
1460
+ tuyệt_nhiên
1461
+ tuần_tự
1462
+ tuốt_luốt
1463
+ tuốt_tuồn_tuột
1464
+ tuốt_tuột
1465
+ tuổi
1466
+ tuổi_cả
1467
+ tuổi_tôi
1468
+ tà_tà
1469
+ tên
1470
+ tên_chính
1471
+ tên_cái
1472
+ tên_họ
1473
+ tên_tự
1474
+ tênh
1475
+ tênh_tênh
1476
+ tìm
1477
+ tìm_bạn
1478
+ tìm_cách
1479
+ tìm_hiểu
1480
+ tìm_ra
1481
+ tình_trạng
1482
+ tính
1483
+ tính_căn
1484
+ tính_phỏng
1485
+ tính_từ
1486
+ tít_mù
1487
+ tò_te
1488
+ tôi
1489
+ tôi_con
1490
+ tông_tốc
1491
+ tù_tì
1492
+ tăm_tắp
1493
+ tăng
1494
+ tăng_chúng
1495
+ tăng_cấp
1496
+ tăng_giảm
1497
+ tăng_thêm
1498
+ tăng_thế
1499
+ tại
1500
+ tại_lòng
1501
+ tại_nơi
1502
+ tại_sao
1503
+ tại_tôi
1504
+ tại_vì
1505
+ tại_đâu
1506
+ tại_đây
1507
+ tại_đó
1508
+ tạo
1509
+ tạo_cơ_hội
1510
+ tạo_nên
1511
+ tạo_ra
1512
+ tạo_ý
1513
+ tạo_điều_kiện
1514
+ tấm
1515
+ tấm_bản
1516
+ tấm_các
1517
+ tấn
1518
+ tấn_tới
1519
+ tất_cả
1520
+ tất_cả_bao_nhiêu
1521
+ tất_thảy
1522
+ tất_tần_tật
1523
+ tất_tật
1524
+ tập_trung
1525
+ tắp
1526
+ tắp_lự
1527
+ tắp_tắp
1528
+ tọt
1529
+ tỏ_ra
1530
+ tỏ_vẻ
1531
+ tốc_tả
1532
+ tối_ư
1533
+ tốt
1534
+ tốt_bạn
1535
+ tốt_bộ
1536
+ tốt_hơn
1537
+ tốt_mối
1538
+ tốt_ngày
1539
+ tột
1540
+ tột_cùng
1541
+ tớ
1542
+ tới
1543
+ tới_gần
1544
+ tới_mức
1545
+ tới_nơi
1546
+ tới_thì
1547
+ tức_thì
1548
+ tức_tốc
1549
+ từ
1550
+ từ_căn
1551
+ từ_giờ
1552
+ từ_khi
1553
+ từ_loại
1554
+ từ_nay
1555
+ từ_thế
1556
+ từ_tính
1557
+ từ_tại
1558
+ từ_từ
1559
+ từ_ái
1560
+ từ_điều
1561
+ từ_đó
1562
+ từ_ấy
1563
+ từng
1564
+ từng_cái
1565
+ từng_giờ
1566
+ từng_nhà
1567
+ từng_phần
1568
+ từng_thời_gian
1569
+ từng_đơn_vị
1570
+ từng_ấy
1571
+ tự
1572
+ tự_cao
1573
+ tự_khi
1574
+ tự_lượng
1575
+ tự_tính
1576
+ tự_tạo
1577
+ tự_vì
1578
+ tự_ý
1579
+ tự_ăn
1580
+ tựu_trung
1581
+ veo
1582
+ veo_veo
1583
+ việc
1584
+ việc_gì
1585
+ vung_thiên_địa
1586
+ vung_tàn_tán
1587
+ vung_tán_tàn
1588
+
1589
+ vài
1590
+ vài_ba
1591
+ vài_người
1592
+ vài_nhà
1593
+ vài_nơi
1594
+ vài_tên
1595
+ vài_điều
1596
+ vào
1597
+ vào_gặp
1598
+ vào_khoảng
1599
+ vào_lúc
1600
+ vào_vùng
1601
+ vào_đến
1602
+ vâng
1603
+ vâng_chịu
1604
+ vâng_dạ
1605
+ vâng_vâng
1606
+ vâng_ý
1607
+ vèo
1608
+ vèo_vèo
1609
+
1610
+ vì_chưng
1611
+ vì_rằng
1612
+ vì_sao
1613
+ vì_thế
1614
+ vì_vậy
1615
+ ví_bằng
1616
+ ví_dù
1617
+ ví_phỏng
1618
+ ví_thử
1619
+ vô_hình_trung
1620
+ vô_kể
1621
+ vô_luận
1622
+ vô_vàn
1623
+ vùng
1624
+ vùng_lên
1625
+ vùng_nước
1626
+ văng_tê
1627
+ vượt
1628
+ vượt_khỏi
1629
+ vượt_quá
1630
+ vạn_nhất
1631
+ vả_chăng
1632
+ vả_lại
1633
+ vấn_đề
1634
+ vấn_đề_quan_trọng
1635
+ vẫn
1636
+ vẫn_thế
1637
+ vậy
1638
+ vậy_là
1639
+ vậy_mà
1640
+ vậy_nên
1641
+ vậy_ra
1642
+ vậy_thì
1643
+ vậy_ư
1644
+ về
1645
+ về_không
1646
+ về_phần
1647
+ về_sau
1648
+ về_tay
1649
+ vị_trí
1650
+ vị_tất
1651
+ vốn_dĩ
1652
+ với
1653
+ với_lại
1654
+ với_nhau
1655
+ vở
1656
+ vụt
1657
+ vừa
1658
+ vừa_khi
1659
+ vừa_lúc
1660
+ vừa_mới
1661
+ vừa_qua
1662
+ vừa_rồi
1663
+ vừa_vừa
1664
+ xa
1665
+ xa_cách
1666
+ xa_gần
1667
+ xa_nhà
1668
+ xa_tanh
1669
+ xa_tắp
1670
+ xa_xa
1671
+ xa_xả
1672
+ xem
1673
+ xem_lại
1674
+ xem_ra
1675
+ xem_số
1676
+ xin
1677
+ xin_gặp
1678
+ xin_vâng
1679
+ xiết_bao
1680
+ xon_xón
1681
+ xoành_xoạch
1682
+ xoét
1683
+ xoẳn
1684
+ xoẹt
1685
+ xuất_kì_bất_ý
1686
+ xuất_kỳ_bất_ý
1687
+ xuể
1688
+ xuống
1689
+ xăm_xúi
1690
+ xăm_xăm
1691
+ xăm_xắm
1692
+ xảy_ra
1693
+ xềnh_xệch
1694
+ xệp
1695
+ xử_lý
1696
+ yêu_cầu
1697
+ à
1698
+ à_này
1699
+ à_ơi
1700
+ ào
1701
+ ào_vào
1702
+ ào_ào
1703
+ á
1704
+ á_à
1705
+ ái
1706
+ ái_chà
1707
+ ái_dà
1708
+ áng
1709
+ áng_như
1710
+ âu_là
1711
+ ít
1712
+ ít_biết
1713
+ ít_có
1714
+ ít_hơn
1715
+ ít_khi
1716
+ ít_lâu
1717
+ ít_nhiều
1718
+ ít_nhất
1719
+ ít_nữa
1720
+ ít_quá
1721
+ ít_ra
1722
+ ít_thôi
1723
+ ít_thấy
1724
+ ô_hay
1725
+ ô_hô
1726
+ ô_kê
1727
+ ô_kìa
1728
+ ôi_chao
1729
+ ôi_thôi
1730
+ ông
1731
+ ông_nhỏ
1732
+ ông_tạo
1733
+ ông_từ
1734
+ ông_ấy
1735
+ ông_ổng
1736
+ úi
1737
+ úi_chà
1738
+ úi_dào
1739
+ ý
1740
+ ý_chừng
1741
+ ý_da
1742
+ ý_hoặc
1743
+ ăn
1744
+ ăn_chung
1745
+ ăn_chắc
1746
+ ăn_chịu
1747
+ ăn_cuộc
1748
+ ăn_hết
1749
+ ăn_hỏi
1750
+ ăn_làm
1751
+ ăn_người
1752
+ ăn_ngồi
1753
+ ăn_quá
1754
+ ăn_riêng
1755
+ ăn_tay
1756
+ ăn_trên
1757
+ ăn_về
1758
+ đang
1759
+ đang_tay
1760
+ đang_thì
1761
+ điều
1762
+ điều_gì
1763
+ điều_kiện
1764
+ điểm
1765
+ điểm_chính
1766
+ điểm_gặp
1767
+ điểm_đầu_tiên
1768
+ đành_đạch
1769
+ đáng
1770
+ đáng_kể
1771
+ đáng_lí
1772
+ đáng_lý
1773
+ đáng_lẽ
1774
+ đáng_số
1775
+ đánh_đùng
1776
+ đáo_để
1777
+ đâu
1778
+ đâu_có
1779
+ đâu_cũng
1780
+ đâu_như
1781
+ đâu_nào
1782
+ đâu_phải
1783
+ đâu_đâu
1784
+ đâu_đây
1785
+ đâu_đó
1786
+ đây
1787
+ đây_này
1788
+ đây_rồi
1789
+ đây_đó
1790
+ đã
1791
+ đã_hay
1792
+ đã_không
1793
+ đã_là
1794
+ đã_lâu
1795
+ đã_thế
1796
+ đã_vậy
1797
+ đã_đủ
1798
+ đó
1799
+ đó_đây
1800
+ đúng
1801
+ đúng_ngày
1802
+ đúng_ra
1803
+ đúng_tuổi
1804
+ đúng_với
1805
+ đơn_vị
1806
+ đưa
1807
+ đưa_cho
1808
+ đưa_chuyện
1809
+ đưa_em
1810
+ đưa_ra
1811
+ đưa_tay
1812
+ đưa_tin
1813
+ đưa_tới
1814
+ đưa_vào
1815
+ đưa_về
1816
+ đưa_xuống
1817
+ đưa_đến
1818
+ được
1819
+ được_cái
1820
+ được_lời
1821
+ được_nước
1822
+ được_tin
1823
+ đại_loại
1824
+ đại_phàm
1825
+ đại_để
1826
+ đạt
1827
+ đảm_bảo
1828
+ đầu_tiên
1829
+ đầy
1830
+ đầy_năm
1831
+ đầy_phè
1832
+ đầy_tuổi
1833
+ đặc_biệt
1834
+ đặt
1835
+ đặt_làm
1836
+ đặt_mình
1837
+ đặt_mức
1838
+ đặt_ra
1839
+ đặt_trước
1840
+ đặt_để
1841
+ đến
1842
+ đến_bao_giờ
1843
+ đến_cùng
1844
+ đến_cùng_cực
1845
+ đến_cả
1846
+ đến_giờ
1847
+ đến_gần
1848
+ đến_hay
1849
+ đến_khi
1850
+ đến_lúc
1851
+ đến_lời
1852
+ đến_nay
1853
+ đến_ngày
1854
+ đến_nơi
1855
+ đến_nỗi
1856
+ đến_thì
1857
+ đến_thế
1858
+ đến_tuổi
1859
+ đến_xem
1860
+ đến_điều
1861
+ đến_đâu
1862
+ đều
1863
+ đều_bước
1864
+ đều_nhau
1865
+ đều_đều
1866
+ để
1867
+ để_cho
1868
+ để_giống
1869
+ để_không
1870
+ để_lòng
1871
+ để_lại
1872
+ để_mà
1873
+ để_phần
1874
+ để_được
1875
+ để_đến_nỗi
1876
+ đối_với
1877
+ đồng_thời
1878
+ đủ
1879
+ đủ_dùng
1880
+ đủ_nơi
1881
+ đủ_số
1882
+ đủ_điều
1883
+ đủ_điểm
1884
+ ơ
1885
+ ơ_hay
1886
+ ơ_kìa
1887
+ ơi
1888
+ ơi_là
1889
+ ư
1890
+
1891
+ ạ_ơi
1892
+ ấy
1893
+ ấy_là
1894
+ ầu_ơ
1895
+ ắt
1896
+ ắt_hẳn
1897
+ ắt_là
1898
+ ắt_phải
1899
+ ắt_thật
1900
+ ối_dào
1901
+ ối_giời
1902
+ ối_giời_ơi
1903
+
1904
+ ồ_ồ
1905
+ ổng
1906
+
1907
+ ớ_này
1908
+
1909
+ ờ_ờ
1910
+
1911
+ ở_lại
1912
+ ở_như
1913
+ ở_nhờ
1914
+ ở_năm
1915
+ ở_trên
1916
+ ở_vào
1917
+ ở_đây
1918
+ ở_đó
1919
+ ở_được
1920
+ ủa
1921
+ ứ_hự
1922
+ ứ_ừ
1923
+
1924
+ ừ_nhé
1925
+ ừ_thì
1926
+ ừ_ào
1927
+ ừ_ừ
1928
+
1929
+ Chỉ
1930
+ Các
1931
+
1932
+ Cần
1933
+ Nhưng
1934
+ Tuy_nhiên
1935
+ Từ
1936
+ Cũng
1937
+ từ
1938
+ đi
1939
+ đến
1940
+ Cho_dù
1941
+ Chủ_yếu
1942
+ Còn
1943
+ Có_lẽ
1944
+ Có_thể
1945
+
1946
+ Dĩ_nhiên
1947
+ Những
1948
+
1949
+
1950
+ Tất_nhiên
1951
+ cho_dù
1952
+ có_lẽ
1953
+ lắm
1954
+ Hiện_nay
1955
+ Tại_đây
1956
+ Như_vậy
1957
+ Từ
1958
+ Vậy
1959
+
1960
+ Bởi
1961
+ Theo
1962
+ Trên
1963
+ Việc
1964
+ Do_đó
1965
+ Hơn_nữa
1966
+ Trong
1967
+ Bên
1968
+ Cùng
1969
+ Cả
1970
+ ây
1971
+ Khi
1972
+ Sau
1973
+ Mỗi
1974
+ Về
1975
+ Không_chỉ
1976
+ Mặc_dù
1977
+ mặc_dù
1978
+ Nhiều
1979
+ Như
1980
+ Do
1981
+ Nếu
1982
+ Nếu_như
1983
+ Hoặc
1984
+ Nhờ
1985
+ Hiện
1986
+ Hiện_tại
1987
+ hiện
1988
+ cạnh
1989
+ Xung_quanh
1990
+ tóm_lại
1991
+ Cho
1992
+ Sau_này
1993
+ Vào
1994
+ ngày_nay
1995
+ chung_quanh
1996
+ Qua
1997
+ Thông_qua
1998
+ bao_gồm