NguyenTuan-UET commited on
Commit
3a69ac8
·
1 Parent(s): 963890d

Initial commit: keyword-extraction-viet (models + vncorenlp via Git LFS)

Browse files
.gitattributes CHANGED
@@ -33,3 +33,11 @@ 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
+ vncorenlp filter=lfs diff=lfs merge=lfs -text
37
+ pretrained-models/phobert.pt filter=lfs diff=lfs merge=lfs -text
38
+ pretrained-models/ner-vietnamese-electra-base.pt filter=lfs diff=lfs merge=lfs -text
39
+ pretrained-models/vncorenlp/models/postagger/vi-tagger filter=lfs diff=lfs merge=lfs -text
40
+ pretrained-models/vncorenlp/VnCoreNLP-1.2.jar filter=lfs diff=lfs merge=lfs -text
41
+ pretrained-models/*.pt filter=lfs diff=lfs merge=lfs -text
42
+ pretrained-models/vncorenlp/*.jar filter=lfs diff=lfs merge=lfs -text
43
+ pretrained-models/vncorenlp/models/** filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ venv
2
+ test_file.txt
3
+ scrap.py
4
+
.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>
README.md CHANGED
@@ -1,3 +1,109 @@
1
- ---
2
- license: mit
3
- ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ tags:
3
+ - keyword-extraction
4
+ language:
5
+ - vi
6
+ ---
7
+
8
+
9
+ # <a name="introduction"></a> KeyBERTVi - Keyword Extraction for Vietnamese language
10
+
11
+ Inspired by [KeyBERT](https://github.com/MaartenGr/KeyBERT), KeyBERTVi implements a similar keyword extraction technique that leverages the embeddings of [PhoBERT](https://huggingface.co/vinai/phobert-base) and minimal linguistics properties to extract keywords and keyphrases that are most similar to the document.
12
+
13
+ <a name="toc"/></a>
14
+ ## Table of Contents
15
+ <!--ts-->
16
+ 1. [About the Project](#about)
17
+ 2. [Getting Started](#gettingstarted)
18
+ 2.1. [Installation](#installation)
19
+ 2.2. [Basic Usage](#usage)
20
+ 2.3. [Diversify Results](#diversify)
21
+ 3. [Limitations](#limitations)
22
+ <!--te-->
23
+
24
+ <a name="about"/></a>
25
+ ## 1. About the Project
26
+
27
+ This implementation took inspiration from the simple yet intuitive and powerful method of [KeyBERT](https://github.com/MaartenGr/KeyBERT/), applied for the Vietnamese language. PhoBERT are used to generate both document-level embeddings and word-level embeddings for extracted N-grams. Cosine similarity is then used to compute which N-grams are most similar to the document-level embedding, thus can be perceived as most representative of the document.
28
+ Preprocessing catered to the Vietnamese language was applied.
29
+
30
+ Test with your own documents at [KeyBERTVi Space](https://huggingface.co/spaces/tpha4308/keybertvi-app).
31
+
32
+ <a name="gettingstarted"/></a>
33
+ ## 2. Getting Started
34
+ <a name="installation"/></a>
35
+ ### 2.1. Setting up
36
+
37
+ ```bash
38
+ git clone https://huggingface.co/tpha4308/keyword-extraction-viet
39
+ ```
40
+
41
+ You can use existing pre-trained models in the repo or download your own and put them in `pretrained-models` folder.
42
+
43
+ ```python
44
+ phobert = AutoModel.from_pretrained("vinai/phobert-base-v2")
45
+ phobert.eval()
46
+ torch.save(phobert, f'{dir_path}/pretrained-models/phobert.pt')
47
+
48
+ ner_model = AutoModelForTokenClassification.from_pretrained("NlpHUST/ner-vietnamese-electra-base")
49
+ ner_model.eval()
50
+ torch.save(ner_model, f'{dir_path}/pretrained-models/ner-vietnamese-electra-base.pt')
51
+ ```
52
+
53
+ **Note:** `dir_path` is the absolute path to the repo.
54
+
55
+ As [PhoBERT](https://huggingface.co/vinai/phobert-base) requires [VnCoreNLP](https://github.com/vncorenlp/VnCoreNLP) as part of pre-processing, the folder `pretrained-models/vncorenlp` is required. To download your own:
56
+ ```bash
57
+ pip install py_vncorenlp
58
+ ```
59
+
60
+ ```python
61
+ import py_vncorenlp
62
+
63
+ py_vncorenlp.download_model(save_dir=f'{dir_path}/pretrained-models/vncorenlp')
64
+ ```
65
+
66
+ <a name="usage"/></a>
67
+ ### 2.2. Basic Usage
68
+
69
+ ```python
70
+ phobert = torch.load(f'{dir_path}/pretrained-models/phobert.pt')
71
+ phobert.eval()
72
+ ner_model = torch.load(f'{dir_path}/pretrained-models/ner-vietnamese-electra-base.pt')
73
+ ner_model.eval()
74
+ kw_pipeline = KeywordExtractorPipeline(phobert, ner_model)
75
+ ```
76
+
77
+ ```python
78
+ title = "Truyền thuyết và hiện tại Thành Cổ Loa"
79
+ text = """
80
+ Nhắc đến Cổ Loa, người ta nghĩ ngay đến truyền thuyết về An Dương Vương được thần Kim Quy bày cho cách xây thành, về chiếc lẫy nỏ thần làm từ móng chân rùa thần và mối tình bi thương Mỵ Châu – Trọng Thủy. Đằng sau những câu chuyện thiên về tâm linh ấy, thế hệ con cháu còn khám phá được những giá trị khảo cổ to lớn của Cổ Loa.
81
+ Khu di tích Cổ Loa cách trung – tâm Hà Nội 17km thuộc huyện Đông Anh, Hà Nội, có diện tích bảo tồn gần 500ha được coi là địa chỉ văn hóa đặc biệt của thủ đô và cả nước. Cổ Loa có hàng loạt di chỉ khảo cổ học đã được phát hiện, phản ánh quá trình phát triển liên tục của dân tộc ta từ sơ khai qua các thời kỳ đồ đồng, đồ đá và đồ sắt mà đỉnh cao là văn hóa Đông Sơn, vẫn được coi là nền văn minh sông Hồng thời kỳ tiền sử của dân tộc Việt Nam.
82
+ Cổ Loa từng là kinh đô của nhà nước Âu Lạc thời kỳ An Dương Vương (thế kỷ III TCN) và của nước Đại Việt thời Ngô Quyền (thế kỷ X) mà thành Cổ Loa là một di tích minh chứng còn lại cho đến ngày nay. Thành Cổ Loa được các nhà khảo cổ học đánh giá là “tòa thành cổ nhất, quy mô lớn vào bậc nhất, cấu trúc cũng thuộc loại độc đáo nhất trong lịch sử xây dựng thành lũy của người Việt cổ”.
83
+ """
84
+ inp = {"title": title, "text": text}
85
+ kws = kw_pipeline(inputs=inp, min_freq=1, ngram_n=(1, 3), top_n=5, diversify_result=False)
86
+
87
+ [('Khu di_tích Cổ_Loa', 0.88987315),
88
+ ('Âu_Lạc thời_kỳ An_Dương_Vương', 0.8680505),
89
+ ('thành Cổ_Loa', 0.8661723),
90
+ ('hàng_loạt di_chỉ khảo_cổ_học', 0.8644231),
91
+ ('lịch_sử xây_dựng thành_luỹ', 0.8375939)]
92
+ ```
93
+
94
+ <a name="diversify"/></a>
95
+ ### 2.3. Diversify Results
96
+
97
+ More information needed
98
+
99
+ <a name="limitations"/></a>
100
+ ## 3. Limitations
101
+
102
+ More information needed
103
+
104
+ ## References
105
+ 1. https://github.com/MaartenGr/KeyBERT
106
+ 2. https://github.com/VinAIResearch/PhoBERT
107
+ 3. https://huggingface.co/NlpHUST/ner-vietnamese-electra-base
108
+ 4. https://github.com/undertheseanlp/underthesea
109
+ 5. https://github.com/vncorenlp/VnCoreNLP
app.py ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ inp = {"text": text, "title": title}
12
+ keyword_ls = kw_pipeline(inputs=inp, min_freq=min_freq, ngram_n=(ngram_low_range, ngram_high_range),
13
+ top_n=top_n, diversify_result=diversify_result)
14
+ result = ''
15
+ for kw, score in keyword_ls:
16
+ result += f'{kw}: {score}\n'
17
+ return result
18
+
19
+
20
+ if gr.NO_RELOAD:
21
+ print("Loading PhoBERT model")
22
+ phobert = torch.load(f'{DIR_PATH}/pretrained-models/phobert.pt')
23
+ phobert.eval()
24
+
25
+ print("Loading NER model")
26
+ ner_model = torch.load(f'{DIR_PATH}/pretrained-models/ner-vietnamese-electra-base.pt')
27
+ ner_model.eval()
28
+ kw_pipeline = KeywordExtractorPipeline(phobert, ner_model)
29
+
30
+ if __name__ == "__main__":
31
+ demo = gr.Interface(fn=extract_keyword,
32
+ inputs=[
33
+ gr.Text(
34
+ label="Title",
35
+ lines=1,
36
+ value="Enter title here",
37
+ ),
38
+ gr.Textbox(
39
+ label="Text",
40
+ lines=5,
41
+ value="Enter text here",
42
+ ),
43
+ gr.Number(
44
+ label="Top N keywords",
45
+ info="Number of keywords retrieved",
46
+ value=10
47
+ ),
48
+ gr.Number(
49
+ label="Ngram low range",
50
+ value=1
51
+ ),
52
+ gr.Number(
53
+ label="Ngram high range",
54
+ value=3
55
+ ),
56
+ gr.Number(
57
+ label="Ngram minimum frequency",
58
+ value=1
59
+ ),
60
+ gr.Checkbox(
61
+ label="Diversify result"
62
+ )
63
+ ],
64
+ # inputs=["text", "textbox", "number", "number", "number", "number", "checkbox"],
65
+ outputs=gr.Textbox(
66
+ label="Keywords Extracted",
67
+ )
68
+ )
69
+
70
+ demo.launch(share=True) # Share your demo with just 1 extra parameter 🚀
keybertvi_model.py ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # import py_vncorenlp
2
+ # from transformers import AutoTokenizer, pipeline
3
+ # import torch
4
+ # import os
5
+ # from model.keyword_extraction_utils import extract_keywords
6
+ #
7
+ #
8
+ # class KeyBERTVi:
9
+ #
10
+ # def __init__(self, stopwords_file_path=None):
11
+ # self.annotator = py_vncorenlp.VnCoreNLP(annotators=["wseg", "pos"],
12
+ # save_dir=f'{dir_path}/pretrained-models/vncorenlp')
13
+ # # model = py_vncorenlp.VnCoreNLP(save_dir='/absolute/path/to/vncorenlp')
14
+ # print("Loading PhoBERT model")
15
+ # self.phobert_tokenizer = AutoTokenizer.from_pretrained("vinai/phobert-base-v2")
16
+ #
17
+ # # use absolute path because torch is cached
18
+ # self.phobert = torch.load(f'{dir_path}/pretrained-models/phobert.pt')
19
+ # self.phobert.eval()
20
+ #
21
+ # print("Loading NER model")
22
+ # ner_tokenizer = AutoTokenizer.from_pretrained("NlpHUST/ner-vietnamese-electra-base")
23
+ # ner_model = torch.load(f'{dir_path}/pretrained-models/ner-vietnamese-electra-base.pt')
24
+ # ner_model.eval()
25
+ # self.ner_pipeline = pipeline("ner", model=ner_model, tokenizer=ner_tokenizer)
26
+ #
27
+ # if stopwords_file_path is None:
28
+ # stopwords_file_path = f'{dir_path}/vietnamese-stopwords-dash.txt'
29
+ # with open(stopwords_file_path) as f:
30
+ # self.stopwords = [w.strip() for w in f.readlines()]
31
+ #
32
+ # def extract_keywords(self, title, text, ngram_range=(1, 3), top_n=5, use_kmeans=False, use_mmr=False, min_freq=1):
33
+ # keyword_ls = extract_keywords(text, title,
34
+ # self.ner_pipeline,
35
+ # self.annotator,
36
+ # self.phobert_tokenizer,
37
+ # self.phobert,
38
+ # self.stopwords,
39
+ # ngram_n=ngram_range,
40
+ # top_n=top_n,
41
+ # use_kmeans=use_kmeans,
42
+ # use_mmr=use_mmr,
43
+ # min_freq=min_freq)
44
+ # return keyword_ls
45
+ #
46
+ # def highlight(self, text, keywords):
47
+ # kw_ls = [' '.join(kw.split('_')) for kw, score in keywords]
48
+ # for key in kw_ls:
49
+ # text = text.replace(f" {key}", f" <mark>{key}</mark>")
50
+ # return text
51
+ #
52
+ #
53
+ # dir_path = os.path.dirname(os.path.realpath(__file__))
54
+ # if __name__ == "__main__":
55
+ # # args
56
+ # # print(dir_path)
57
+ #
58
+ # stopwords_file_path = f'{dir_path}/vietnamese-stopwords-dash.txt'
59
+ #
60
+ # # text_file_path = sys.argv[1]
61
+ # # with open(f'{dir_path}/{text_file_path}', 'r') as f:
62
+ # # text = ' '.join([ln.strip() for ln in f.readlines()])
63
+ # # print(text)
64
+ #
65
+ # # kw_model = KeyBERTVi()
66
+ # # model_name_on_hub = "KeyBERTVi"
67
+ # # kw_model.save_pretrained(model_name_on_hub)
68
+ # # kw_model.phobert_tokenizer.save_pretrained(model_name_on_hub)
69
+ #
70
+ # # title = None
71
+ # # keyword_ls = kw_model.extract_keywords(title, text, ngram_range=(1, 3), top_n=5)
72
+ # # print(keyword_ls)
model/keyword_extraction_utils.py ADDED
@@ -0,0 +1,260 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ ne_ls = set(get_named_entities(nlp, doc))
122
+
123
+ segmentised_doc_ne = []
124
+ for sent in segmentised_doc:
125
+ for ne in ne_ls:
126
+ sent = sent.replace(ne, '_'.join(ne.split()))
127
+ segmentised_doc_ne.append(sent)
128
+ return ne_ls, segmentised_doc_ne
129
+
130
+
131
+ def compute_ngram_embeddings(tokenizer, phobert, ngram_list):
132
+ ngram_embeddings = {}
133
+
134
+ for ngram in ngram_list:
135
+ ngram_copy = ngram
136
+ if ngram.isupper():
137
+ ngram_copy = ngram.lower()
138
+ word_embedding = tokenizer.encode(ngram_copy)
139
+ input_ids = torch.tensor([word_embedding])
140
+ with torch.no_grad():
141
+ word_features = phobert(input_ids)
142
+
143
+ ngram_embeddings[ngram] = word_features.pooler_output
144
+ return ngram_embeddings
145
+
146
+
147
+ def compute_ngram_similarity(ngram_list, ngram_embeddings, doc_embedding):
148
+ ngram_similarity_dict = {}
149
+
150
+ for ngram in ngram_list:
151
+ similarity_score = cosine_similarity(ngram_embeddings[ngram], doc_embedding.T).flatten()[0]
152
+ # similarity_score = normalised_cosine_similarity(ngram_embeddings[ngram], doc_embedding.T).flatten()[0]
153
+ ngram_similarity_dict[ngram] = similarity_score
154
+
155
+ return ngram_similarity_dict
156
+
157
+
158
+ def diversify_result_kmeans(ngram_result, ngram_embeddings, top_n=5):
159
+ best_ngrams = sorted(ngram_result, key=ngram_result.get, reverse=True)[:top_n * 4]
160
+ best_ngram_embeddings = np.array([ngram_embeddings[ngram] for ngram in best_ngrams]).squeeze()
161
+ vote = {}
162
+
163
+ for niter in range(100):
164
+ kmeans = KMeans(n_clusters=top_n, init='k-means++', random_state=niter * 2, n_init="auto").fit(
165
+ best_ngram_embeddings)
166
+ kmeans_result = kmeans.labels_
167
+
168
+ res = {}
169
+ for i in range(len(kmeans_result)):
170
+ if kmeans_result[i] not in res:
171
+ res[kmeans_result[i]] = []
172
+ res[kmeans_result[i]].append((best_ngrams[i], ngram_result[best_ngrams[i]]))
173
+
174
+ final_result = [res[k][0] for k in res]
175
+ for keyword in final_result:
176
+ if keyword not in vote:
177
+ vote[keyword] = 0
178
+ vote[keyword] += 1
179
+
180
+ diversify_result_ls = sorted(vote, key=vote.get, reverse=True)
181
+
182
+ return diversify_result_ls[:top_n]
183
+
184
+
185
+ def remove_duplicates(ngram_result):
186
+ to_remove = set()
187
+ for ngram in ngram_result:
188
+
189
+ for ngram2 in ngram_result:
190
+ if ngram not in to_remove and ngram != ngram2 and ngram.lower() == ngram2.lower():
191
+ new_score = np.mean([ngram_result[ngram], ngram_result[ngram2]])
192
+
193
+ ngram_result[ngram] = new_score
194
+ to_remove.add(ngram2)
195
+
196
+ for ngram in to_remove:
197
+ ngram_result.pop(ngram)
198
+ return ngram_result
199
+
200
+
201
+ def compute_filtered_text(annotator, title, text):
202
+ annotated = annotator.annotate_text(text)
203
+ if title is not None:
204
+ annotated = annotator.annotate_text(title + '. ' + text)
205
+ filtered_sentences = []
206
+ keep_tags = ['N', 'Np', 'V', 'Nc']
207
+ for key in annotated.keys():
208
+ # print(key,annotated[key])
209
+ sent = ' '.join([dict_['wordForm'] for dict_ in annotated[key] if dict_['posTag'] in keep_tags])
210
+ filtered_sentences.append(sent)
211
+ return filtered_sentences
212
+
213
+
214
+ def get_candidate_ngrams(segmentised_doc, filtered_segmentised_doc, ngram_n, stopwords_ls):
215
+ # get actual ngrams
216
+ actual_ngram_list = compute_ngram_list(segmentised_doc, ngram_n, stopwords_ls, subsentences=True)
217
+
218
+ # get filtered ngrams
219
+ filtered_ngram_list = compute_ngram_list(filtered_segmentised_doc, ngram_n, stopwords_ls,
220
+ subsentences=False)
221
+
222
+ # get candiate ngrams
223
+ candidate_ngram = [ngram for ngram in filtered_ngram_list if ngram in actual_ngram_list]
224
+ return candidate_ngram
225
+
226
+
227
+ def limit_minimum_frequency(doc_segmentised, ngram_list, min_freq=1):
228
+ ngram_dict_freq = {}
229
+ for ngram in ngram_list:
230
+ ngram_n = len(ngram.split())
231
+ count = 0
232
+ for sentence in doc_segmentised:
233
+ sent = sentence.split()
234
+ # print(sent)
235
+ for i in range(len(sent) - ngram_n + 1):
236
+ pair = ' '.join(sent[i:i + ngram_n])
237
+ # print(pair, ngram)
238
+ if pair == ngram:
239
+ count += 1
240
+ # print(ngram, count)
241
+ if count >= min_freq:
242
+ ngram_dict_freq[ngram] = count
243
+
244
+ return ngram_dict_freq
245
+
246
+
247
+ def remove_overlapping_ngrams(ngram_list):
248
+ to_remove = set()
249
+ for ngram1 in ngram_list:
250
+ for ngram2 in ngram_list:
251
+ if len(ngram1.split()) > len(ngram2.split()) and (ngram1.startswith(ngram2) or ngram1.endswith(ngram2)):
252
+ # print(ngram1, ngram2)
253
+ # print()
254
+ to_remove.add(ngram2)
255
+
256
+ # print("To removed")
257
+ # print(to_remove)
258
+ for kw in to_remove:
259
+ ngram_list.remove(kw)
260
+ 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,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+
17
+ print("Loading PhoBERT tokenizer")
18
+ self.phobert_tokenizer = AutoTokenizer.from_pretrained("vinai/phobert-base-v2")
19
+ self.phobert = model
20
+
21
+ print("Loading NER tokenizer")
22
+ ner_tokenizer = AutoTokenizer.from_pretrained("NlpHUST/ner-vietnamese-electra-base")
23
+ self.ner_pipeline = pipeline("ner", model=ner_model, tokenizer=ner_tokenizer)
24
+
25
+ stopwords_file_path = f'{dir_path}/vietnamese-stopwords-dash.txt'
26
+ with open(stopwords_file_path) as f:
27
+ self.stopwords = [w.strip() for w in f.readlines()]
28
+
29
+ def _sanitize_parameters(self, **kwargs):
30
+ preprocess_kwargs = {}
31
+ forward_kwargs = {}
32
+ postprocess_kwargs = {}
33
+
34
+ for possible_preprocess_kwarg in ["text", "title"]:
35
+ if possible_preprocess_kwarg in kwargs:
36
+ preprocess_kwargs[possible_preprocess_kwarg] = kwargs[possible_preprocess_kwarg]
37
+
38
+ for possible_forward_kwarg in ["ngram_n", "min_freq"]:
39
+ if possible_forward_kwarg in kwargs:
40
+ forward_kwargs[possible_forward_kwarg] = kwargs[possible_forward_kwarg]
41
+
42
+ for possible_postprocess_kwarg in ["top_n", "diversify_result"]:
43
+ if possible_postprocess_kwarg in kwargs:
44
+ postprocess_kwargs[possible_postprocess_kwarg] = kwargs[possible_postprocess_kwarg]
45
+
46
+ return preprocess_kwargs, forward_kwargs, postprocess_kwargs
47
+
48
+ def preprocess(self, inputs):
49
+ title = None
50
+ if inputs['title']:
51
+ title = process_text_pipeline(inputs['title'])
52
+ text = process_text_pipeline(inputs['text'])
53
+ return {"text": text, "title": title}
54
+
55
+ def _forward(self, model_inputs, ngram_n, min_freq):
56
+ text = model_inputs['text']
57
+ title = model_inputs['title']
58
+
59
+ # Getting segmentised document
60
+ ne_ls, doc_segmentised = get_segmentised_doc(self.ner_pipeline, self.annotator, title, text)
61
+ filtered_doc_segmentised = compute_filtered_text(self.annotator, title, text)
62
+
63
+ doc_embedding = get_doc_embeddings(filtered_doc_segmentised, self.phobert_tokenizer, self.phobert,
64
+ self.stopwords)
65
+
66
+ ngram_list = self.generate_ngram_list(doc_segmentised, filtered_doc_segmentised, ne_ls, ngram_n, min_freq)
67
+ print("Final ngram list")
68
+ print(sorted(ngram_list))
69
+
70
+ ngram_embeddings = compute_ngram_embeddings(self.phobert_tokenizer, self.phobert, ngram_list)
71
+
72
+ return {"ngram_list": ngram_list, "ngram_embeddings": ngram_embeddings, "doc_embedding": doc_embedding}
73
+
74
+ def postprocess(self, model_outputs, top_n, diversify_result):
75
+ ngram_list = model_outputs['ngram_list']
76
+ ngram_embeddings = model_outputs['ngram_embeddings']
77
+ doc_embedding = model_outputs['doc_embedding']
78
+
79
+ ngram_result = self.extract_keywords(doc_embedding, ngram_list, ngram_embeddings)
80
+ non_diversified = sorted([(ngram, ngram_result[ngram]) for ngram in ngram_result],
81
+ key=lambda x: x[1], reverse=True)[:top_n]
82
+
83
+ if diversify_result:
84
+ return diversify_result_kmeans(ngram_result, ngram_embeddings, top_n=top_n)
85
+ return non_diversified
86
+
87
+ def generate_ngram_list(self, doc_segmentised, filtered_doc_segmentised, ne_ls, ngram_n, min_freq):
88
+ ngram_low, ngram_high = ngram_n
89
+
90
+ # Adding ngram
91
+ ngram_list = set()
92
+ for n in range(ngram_low, ngram_high + 1):
93
+ ngram_list.update(get_candidate_ngrams(doc_segmentised, filtered_doc_segmentised, n, self.stopwords))
94
+
95
+ # print(sorted(ngram_list))
96
+ # Adding named entities ngram list
97
+ ne_ls_segmented = [self.annotator.word_segment(ne)[0] for ne in ne_ls]
98
+ print("Named Entities list")
99
+ print(ne_ls_segmented)
100
+ ngram_list.update(ne_ls_segmented)
101
+
102
+ # print(sorted(ngram_list))
103
+ # Removing overlapping ngrams
104
+ ngram_list = remove_overlapping_ngrams(ngram_list)
105
+ # print("Removed overlapping ngrams")
106
+ # print(sorted(ngram_list))
107
+
108
+ # Limit ngrams by minimum frequency
109
+ if min_freq > 1:
110
+ ngram_list = limit_minimum_frequency(doc_segmentised, ngram_list, min_freq=min_freq)
111
+ return ngram_list.keys()
112
+
113
+ return ngram_list
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
+ phobert = torch.load(f'{dir_path}/pretrained-models/phobert.pt')
123
+ phobert.eval()
124
+ ner_model = torch.load(f'{dir_path}/pretrained-models/ner-vietnamese-electra-base.pt')
125
+ ner_model.eval()
126
+ kw_pipeline = KeywordExtractorPipeline(phobert, ner_model)
127
+
128
+ text_file_path = f'{dir_path}/test_file.txt'
129
+ with open(text_file_path, 'r') as f:
130
+ text = ' '.join([ln.strip() for ln in f.readlines()])
131
+
132
+ inp = {"text": text, "title": None}
133
+ kws = kw_pipeline(inputs=inp, min_freq=1, ngram_n=(1, 3), top_n=5, diversify_result=False)
134
+ print(kws)
pretrained-models/ner-vietnamese-electra-base.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:af136f7fcb73fba5edee9021032227ede597c2882f39d910b3b830cf49bf5d52
3
+ size 532423140
pretrained-models/phobert.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:984b4f9b49a06331113974f50c8dc96b845bf808034b79993c3ddbf4a946d872
3
+ size 540111904
pretrained-models/vncorenlp/VnCoreNLP-1.2.jar ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9e2811cdbc2ddfc71d04be5dc36e185c88dcd1ad4d5d69e4ff2e1369dccf7793
3
+ size 27412703
pretrained-models/vncorenlp/models/dep/vi-dep.xz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:266e4a3a55d5edd1607d5f036c2f95b70c0a6c80f58b57fd9962677a6ef331b7
3
+ size 16048864
pretrained-models/vncorenlp/models/ner/vi-500brownclusters.xz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d30f9cfdf0af193a69e185d1acda0306a9fbe1321f8a700f7c66557a90f92b8c
3
+ size 5599844
pretrained-models/vncorenlp/models/ner/vi-ner.xz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f04c5e752d7f99a6313b758fc2607a2c3906e58b1d60a37eb0192aead73d61f7
3
+ size 9956876
pretrained-models/vncorenlp/models/ner/vi-pretrainedembeddings.xz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:00d3d034f1b23a8bfe5168195741fde845808c212e6dfcd4c94bead1665eb0fc
3
+ size 57313672
pretrained-models/vncorenlp/models/postagger/vi-tagger ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a95608a5982db89c11353b451154ec396eccc0ff1f5b22874935ecdf4e0ace01
3
+ size 29709468
pretrained-models/vncorenlp/models/wordsegmenter/vi-vocab ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0a47c5b55bbce163029d37730a67b9479740388695c29c106c112b815613eaa5
3
+ size 526544
pretrained-models/vncorenlp/models/wordsegmenter/wordsegmenter.rdr ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9e62f96bd93e37a24f364238e8d8ae986fa5dad6dbc9f4eae622ab3651b7fa06
3
+ size 128508
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ torch
2
+ py_vncorenlp
3
+ transformers
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