探索中文文本處理利器 - Python jieba庫詳解

更多資料獲取

📚 個人網站:ipengtao.com


jieba庫介紹

在處理中文文本數據時,分詞是一項至關重要的任務。而在Python的工具箱中,jieba庫作為一款強大的中文分詞工具,為開發者提供了高效而靈活的解決方案。jieba(結巴)這個名字來源于“結巴起訴”這個網絡用語,寓意著對中文文本進行精準而迅速的分詞操作。

應用場景

中文文本處理在自然語言處理(NLP)和文本挖掘等領域中占據著重要的地位。與英文相比,中文的分詞更為復雜,因為中文語言不具備空格分隔詞匯的特性。因此,為了更好地理解和分析中文文本,需要借助強大的中文分詞工具,而jieba正是滿足這一需求的重要工具之一。

在實際應用中,中文分詞不僅僅是為了方便閱讀,更是為了進行文本挖掘、情感分析、關鍵詞提取等任務。jieba庫提供了豐富的功能,包括不同模式的分詞、詞性標注、關鍵詞提取等,使得中文文本處理更加高效和便捷。

無論是在搜索引擎優化、社交媒體分析、還是在構建自然語言處理模型中,jieba庫都是處理中文文本不可或缺的利器。接下來,將深入探討jieba庫的各個方面,揭示其在中文文本處理中的強大功能。

安裝和基本用法

1. 使用 pip 安裝jieba庫

在開始使用jieba庫之前,首先需要進行安裝。可以使用以下命令通過pip安裝jieba:

pip install jieba

2. 基本分詞示例代碼

一旦安裝完成,就可以開始使用jieba進行基本的中文分詞。

下面是一個簡單的示例代碼:

import jieba# 待分詞的中文文本
text = "結巴分詞是一款強大的中文分詞工具。"# 使用 jieba.cut 進行基本分詞,返回一個生成器
seg_result_generator = jieba.cut(text)# 將生成器轉換為列表,并打印分詞結果
seg_result_list = list(seg_result_generator)
print("分詞結果:", seg_result_list)

3. 解釋

  • jieba.cut 是jieba庫中最基本的分詞函數,用于將中文文本進行分詞。
  • 返回的是一個生成器,我們可以通過將生成器轉換為列表來查看分詞結果。
  • 分詞的結果是以詞語為單位的列表。

分詞算法和原理

1. jieba分詞的算法簡介

jieba分詞采用了基于前綴詞典的分詞算法,主要包括以下幾個步驟:

  • 構建前綴詞典: jieba通過分析大量中文文本,構建了一個包含了各種詞語及其頻率的前綴詞典。這個詞典中存儲了詞語的前綴、后綴以及整個詞語本身。

  • 基于前綴詞典的分詞: 在進行分詞時,jieba會根據前綴詞典,從文本中找到最可能的詞語。該算法具有較高的準確性和分詞效率。

  • HMM模型: 除了基于前綴詞典的方法,jieba還引入了隱馬爾可夫模型(HMM),用于處理一些特殊情況,例如新詞、未登錄詞等。

2. 中文分詞的挑戰和jieba的解決方案

中文分詞面臨一些挑戰,其中之一是語言的歧義性和多義性。同一個詞語在不同的語境中可能有不同的含義,這增加了分詞的難度。

jieba通過前綴詞典和HMM模型的結合,有效應對了中文分詞的挑戰:

  • 前綴詞典: 通過維護一個龐大而豐富的前綴詞典,jieba可以更好地處理常見詞語和短語,提高分詞的準確性。

  • HMM模型: HMM模型可以在一些復雜的語境中發揮作用,幫助jieba更好地理解文本,并對未登錄詞進行更準確的分詞。

  • 用戶自定義詞典: 用戶可以通過添加自定義詞典,進一步指導jieba在特定領域或語境中更準確地分詞。

基本分詞函數介紹

在jieba庫中,有幾個基本的分詞函數,它們提供了不同的分詞方法和輸出格式。

1. jieba.cut

jieba.cut 是jieba庫中最基本的分詞方法,用于將中文文本進行基本的分詞操作。

import jieba# 待分詞的中文文本
text = "結巴分詞是一款強大的中文分詞工具。"# 使用 jieba.cut 進行基本分詞,返回一個生成器
seg_result_generator = jieba.cut(text)# 將生成器轉換為列表,并打印分詞結果
seg_result_list = list(seg_result_generator)
print("jieba.cut 分詞結果:", seg_result_list)

解釋:

  • jieba.cut 默認使用精確模式,將文本分成一個一個的詞語。
  • 返回的是一個生成器,通過將生成器轉換為列表可以查看分詞結果。

2. jieba.cut_for_search

jieba.cut_for_search 適用于搜索引擎,對長詞再次進行切分,提高搜索時的分詞效果。

import jieba# 待分詞的中文文本
query = "自然語言處理"# 使用 jieba.cut_for_search 進行搜索引擎分詞
seg_result_generator = jieba.cut_for_search(query)# 將生成器轉換為列表,并打印分詞結果
seg_result_list = list(seg_result_generator)
print("jieba.cut_for_search 分詞結果:", seg_result_list)

解釋:

  • jieba.cut_for_search 在精確模式的基礎上,對長詞再次進行切分,適用于搜索引擎查詢。

3. jieba.lcut

jieba.lcutjieba.cut 的簡化版本,直接返回一個列表,方便在實際應用中使用。

import jieba# 待分詞的中文文本
text = "結巴分詞是一款強大的中文分詞工具。"# 使用 jieba.lcut 進行基本分詞,并打印結果
seg_result_list = jieba.lcut(text)
print("jieba.lcut 分詞結果:", seg_result_list)

解釋:

  • jieba.lcut 直接返回一個列表,更方便在實際應用中使用。

詞性標注和關鍵詞提取

1. 使用 jieba.posseg 進行詞性標注

jieba.posseg 模塊提供了對中文文本進行詞性標注的功能。

以下是一個示例代碼:

import jieba.posseg as pseg# 待標注詞性的中文文本
text = "結巴分詞是一款強大的中文分詞工具。"# 使用 jieba.posseg 進行詞性標注
words = pseg.cut(text)# 打印詞性標注結果
for word, pos in words:print(f"{word} : {pos}")

解釋:

  • jieba.posseg.cut 返回的結果是一個生成器,包含了每個詞語及其對應的詞性。
  • 通過遍歷生成器,我們可以獲取每個詞語以及它的詞性。

2. 使用 jieba.analyse 提取關鍵詞

jieba.analyse 模塊提供了關鍵詞提取的功能。

以下是一個示例代碼:

import jieba.analyse# 待提取關鍵詞的中文文本
text = "結巴分詞是一款強大的中文分詞工具。"# 使用 jieba.analyse 提取關鍵詞
keywords = jieba.analyse.extract_tags(text, topK=5)# 打印提取的關鍵詞
print("提取的關鍵詞:", keywords)

解釋:

  • jieba.analyse.extract_tags 用于提取文本中的關鍵詞,返回一個包含關鍵詞的列表。
  • 參數 topK 可以指定提取關鍵詞的數量。

用戶自定義詞典

1. 如何添加自定義詞典,提高分詞準確性

在jieba中,我們可以通過添加自定義詞典的方式,指導分詞器更好地處理特定詞匯,提高分詞的準確性。以下是添加自定義詞典的示例代碼:

import jieba# 待分詞的中文文本
text = "結巴分詞是一款強大的中文分詞工具。"# 添加自定義詞典
jieba.add_word("結巴分詞")# 使用 jieba.cut 進行分詞
seg_result = jieba.cut(text)# 將生成器轉換為列表,并打印分詞結果
seg_result_list = list(seg_result)
print("添加自定義詞典后的分詞結果:", seg_result_list)

解釋:

  • jieba.add_word 用于添加自定義詞典,這里我們添加了一個示例詞匯"結巴分詞"。
  • 添加自定義詞典后,再進行分詞操作,分詞器會優先考慮自定義詞匯。

2. 示例:處理特定行業或領域的文本

在處理特定行業或領域的文本時,用戶自定義詞典尤為重要。例如,假設我們處理的是醫學領域的文本:

import jieba# 待分詞的醫學文本
medical_text = "新藥研發取得重大突破,對治療某種疾病具有顯著效果。"# 添加醫學領域的自定義詞匯
jieba.add_word("新藥研發")
jieba.add_word("治療某種疾病")# 使用 jieba.cut 進行分詞
seg_result = jieba.cut(medical_text)# 將生成器轉換為列表,并打印分詞結果
seg_result_list = list(seg_result)
print("添加醫學領域自定義詞典后的分詞結果:", seg_result_list)

解釋:

  • 在醫學文本中,添加了自定義詞匯"新藥研發"和"治療某種疾病"。
  • 添加醫學領域的自定義詞典后,分詞器能更好地理解并正確分割特定領域的術語。

停用詞過濾

1. 介紹停用詞的概念

停用詞(Stop Words)指在信息檢索中,為節省存儲空間和提高處理速度,在處理自然語言數據(或文本)之前或之后會自動過濾掉的某些字或詞。這些詞通常是一些常見的虛詞、連接詞或者高頻詞,它們在文本中出現的頻率非常高,但對于文本的含義分析并沒有太大的幫助。

常見的停用詞包括例如:“的”、“是”、"在"等,這些詞語在很多文本中都會頻繁出現,但通常對文本的主題或內容分析貢獻較小。

2. 使用jieba過濾停用詞,提高分析效果

在jieba中,我們可以通過加載停用詞表的方式,將停用詞過濾掉,以提高分析效果。以下是一個示例代碼:

import jieba# 待分詞的中文文本
text = "結巴分詞是一款強大的中文分詞工具,可以廣泛應用于自然語言處理和文本挖掘領域。"# 示例停用詞表
stop_words = ["是", "一款", "可以", "和", "領域"]# 加載停用詞表
jieba.analyse.set_stop_words(stop_words)# 使用 jieba.cut 進行分詞
seg_result = jieba.cut(text)# 過濾停用詞后,將生成器轉換為列表,并打印分詞結果
filtered_seg_result_list = [word for word in seg_result if word not in stop_words]
print("過濾停用詞后的分詞結果:", filtered_seg_result_list)

解釋:

  • jieba.analyse.set_stop_words 用于加載停用詞表,將停用詞從分詞結果中過濾掉。
  • 示例中的停用詞表可以根據實際需求進行擴展或修改。

文本情感分析

1. 使用jieba進行文本情感分析的基本步驟

文本情感分析是通過計算文本中包含的情感信息,來判斷文本是正面的、負面的還是中性的一項任務。

使用jieba進行文本情感分析的基本步驟包括:

  • 分詞:使用jieba進行文本分詞,將文本劃分為一個一個的詞語。
  • 提取特征:選擇合適的特征表示方法,可以是詞袋模型、TF-IDF等。
  • 構建模型:選擇合適的機器學習或深度學習模型,訓練模型以學習文本中的情感信息。
  • 預測:使用訓練好的模型對新的文本進行情感預測。

2. 示例代碼:情感分析的應用場景

以下是一個簡單的情感分析示例代碼,使用jieba進行文本分詞和sklearn庫中的樸素貝葉斯分類器進行情感分析:

import jieba
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB# 構建情感分析數據集
positive_texts = ["這個產品太棒了,我非常喜歡!","服務很好,態度也很熱情。","真的是太贊了!"]
negative_texts = ["這個產品質量很差,不值得購買。","服務太差勁了,態度很惡劣。","真的很失望。"]# 分詞處理
positive_seg = [" ".join(jieba.cut(text)) for text in positive_texts]
negative_seg = [" ".join(jieba.cut(text)) for text in negative_texts]# 構建特征表示
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(positive_seg + negative_seg)# 構建標簽
y = [1] * len(positive_texts) + [0] * len(negative_texts)# 構建樸素貝葉斯分類器
clf = MultinomialNB()
clf.fit(X, y)# 測試情感分析
test_text = "這個產品真的太差了,完全不值得購買。"
test_seg = " ".join(jieba.cut(test_text))
test_X = vectorizer.transform([test_seg])
result = clf.predict(test_X)# 打印結果
if result[0] == 1:print("情感分析結果:正面")
else:print("情感分析結果:負面")

解釋:

  • 使用jieba對情感分析數據集進行分詞處理。
  • 利用sklearn的CountVectorizer將文本轉換為詞袋模型。
  • 使用樸素貝葉斯分類器進行情感分析模型訓練。
  • 對新的文本進行情感分析預測,輸出分析結果。

示例代碼:不同場景下的應用

1. 中文文本處理與詞云生成

import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt# 待處理的中文文本
text = "結巴分詞是一款強大的中文分詞工具,可以廣泛應用于自然語言處理和文本挖掘領域。"# 使用jieba進行分詞
seg_result = jieba.cut(text)
seg_result_str = " ".join(seg_result)# 生成詞云
wordcloud = WordCloud(font_path="simsun.ttf", background_color="white").generate(seg_result_str)# 顯示詞云圖
plt.figure(figsize=(8, 8), facecolor=None)
plt.imshow(wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()

解釋:

  • 使用jieba進行中文文本分詞,將分詞結果轉為字符串。
  • 利用詞云庫WordCloud生成詞云圖,可通過font_path指定中文字體。

2. 社交媒體評論情感分析

import jieba
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB# 構建情感分析數據集
positive_texts = ["這個產品太棒了,我非常喜歡!","服務很好,態度也很熱情。","真的是太贊了!"]
negative_texts = ["這個產品質量很差,不值得購買。","服務太差勁了,態度很惡劣。","真的很失望。"]# 分詞處理
positive_seg = [" ".join(jieba.cut(text)) for text in positive_texts]
negative_seg = [" ".join(jieba.cut(text)) for text in negative_texts]# 構建特征表示
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(positive_seg + negative_seg)# 構建標簽
y = [1] * len(positive_texts) + [0] * len(negative_texts)# 構建樸素貝葉斯分類器
clf = MultinomialNB()
clf.fit(X, y)# 測試情感分析
test_text = "這個產品真的太差了,完全不值得購買。"
test_seg = " ".join(jieba.cut(test_text))
test_X = vectorizer.transform([test_seg])
result = clf.predict(test_X)# 打印結果
if result[0] == 1:print("情感分析結果:正面")
else:print("情感分析結果:負面")

解釋:

  • 構建一個簡單的情感分析模型,使用jieba進行中文文本分詞和sklearn的樸素貝葉斯分類器進行情感分析。

3. 新聞主題提取

import jieba.analyse# 待提取關鍵詞的新聞文本
news_text = "近日,一項關于新冠疫苗的研究成果在國際上引起廣泛關注。"# 使用jieba提取關鍵詞
keywords = jieba.analyse.extract_tags(news_text, topK=5)# 打印提取的關鍵詞
print("提取的關鍵詞:", keywords)

解釋:

  • 使用jieba.analyse.extract_tags提取新聞文本的關鍵詞。

4. 用戶評論關鍵詞提取

import jieba.analyse# 用戶評論文本
user_comment = "這個產品很好用,性價比也很高,非常滿意。"# 使用jieba提取關鍵詞
keywords = jieba.analyse.extract_tags(user_comment, topK=3)# 打印提取的關鍵詞
print("用戶關鍵詞提取結果:", keywords)

解釋:

  • 使用jieba.analyse.extract_tags從用戶評論中提取關鍵詞,可以了解用戶關注的方面。

總結

在本篇博客中,深入探討了Python中的jieba庫在不同場景下的應用。首先,學習了jieba庫在中文文本處理中的基本用法,包括分詞、詞性標注、關鍵詞提取等功能。通過示例代碼,展示了jieba如何應對中文語境的多樣性,提供了強大而靈活的文本處理工具。接著,將jieba應用到了具體場景,如社交媒體評論情感分析、新聞主題提取和用戶評論關鍵詞提取。在社交媒體情感分析中,結合sklearn的樸素貝葉斯分類器,展示了如何通過分詞和模型訓練實現簡單而有效的情感分析。在新聞主題提取和用戶評論關鍵詞提取中,jieba.analyse.extract_tags函數的靈活應用使得從大量文本中快速提取關鍵信息變得簡便而高效。最后,還通過一個實例展示了如何使用jieba生成中文文本的詞云圖,通過可視化更形象地展示文本中的關鍵詞。這對于從大量文本中直觀地捕捉主題和熱點具有重要作用。

綜合而言,jieba庫在中文文本處理中的多功能性、高效性以及與其他庫的良好兼容性,使其成為處理中文文本的首選工具之一。通過理解jieba的各項功能和實際應用,大家將能更好地利用這一工具,滿足不同領域和場景下的文本處理需求。


Python學習路線

在這里插入圖片描述

更多資料獲取

📚 個人網站:ipengtao.com

如果還想要領取更多更豐富的資料,可以點擊文章下方名片,回復【優質資料】,即可獲取 全方位學習資料包。

在這里插入圖片描述
點擊文章下方鏈接卡片,回復【優質資料】,可直接領取資料大禮包。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212006.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212006.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212006.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JDK8新特性:Lambda表達式規則及用法,方法引用

目錄 Lambda表達式是JDK8新增的一種語法格式 1.作用 2.用法規則: 3.方法引用 Lambda表達式是JDK8新增的一種語法格式 1.作用 簡化匿名內部類的代碼寫法 Lambad用法前提:只能簡化函數式接口(一般加有Funcationallnterface)&a…

Python dateutil 庫:簡化日期和時間處理的利器

更多資料獲取 📚 個人網站:ipengtao.com 在Python中,處理日期和時間是常見的任務之一。dateutil庫是Python標準庫中datetime模塊的擴展,提供了許多方便的工具和函數,簡化了日期和時間的操作。 安裝與基本用法 首先&…

小黑子之——MybatiPlus整合

MybatiPlus學習 一、MybatiPlus簡介1.1 入門案例1.2 mybatisPlus概述1.3 總結 二、標準數據層開發2.1 標準的CRUD使用2.2 新增2.3 刪除2.4 修改2.5 根據Id查詢2.6 查詢全部2.7 Lombok2.8 分頁功能 三、DQL控制3.1 條件查詢方式3.1.1 構建條件查詢3.1.2 多條件查詢3.1.3 null值判…

運維05:自動化

人工運維時代 運維人員早期需要維護眾多的機器,因此需要執行很多重復的勞動,很多機器需要同時部署相同的服務或者是執行相同的命令,還得反復地登錄不同的機器,執行重復的動作 自動化運維時代 早期運維人員會結合ssh免密登錄&…

Java基礎——對象類型轉換(向上、向下轉型)

非繼承關系的類之間對象類型不可以互相類型轉換,只有繼承關系才可以互相轉換。 簡單說,對象類型轉換的前提要是繼承關系。 對象類型轉換分為:向上轉型和向下轉型。多態就是一種自動向上轉型。 向上轉型:子類對象用父類類型接收…

Leetcode 2963. Count the Number of Good Partitions

Leetcode 2963. Count the Number of Good Partitions 1. 解題思路2. 代碼實現 題目鏈接:2963. Count the Number of Good Partitions 1. 解題思路 這一題根據題意,顯然我們可以將其先分為 n n n個原子partition,確保任意兩個partition之間…

git 常用的使用方法

1.查看分支 $ git branch #查看本地分支 $ git branch -r #查看遠程分支 $ git branch -a #查看所有分支 $ git branch -vv #查看本地分支及追蹤的分支 2.創建分支 方法1 $ git branch 分支名 #創建本地分支 #將本地分支push,就創建了遠程分支方法2 #創建本地分…

載入了名字空間‘htmltools’ 0.5.6,但需要的是>= 0.5.7解決方案

解決方案:刪除之前的舊版本安裝包,安裝新的包 1.卸載之前的安裝包 2.關閉R,重新打開 3. # install.packages("htmltools") library(htmltools)

Java 并發編程(一)

1、在 java 中守護線程和本地線程區別? java 中的線程分為兩種:守護線程(Daemon)和用戶線程(User) 任何線程都可以設置為守護線程和用戶線程,通過方法 Thread.setDaemon(boolon);tru…

HarmonyOS學習--了解基本工程目錄

1.工程級目錄 工程的目錄結構如下: 其中詳細如下: AppScope中存放應用全局所需要的資源文件。entry是應用的主模塊,存放HarmonyOS應用的代碼、資源等。oh_modules是工程的依賴包,存放工程依賴的源文件。build-profile.json5是工…

如何找到MACOS系統更新的安裝包

首先在應用商店中下載新系統的安裝包,然后在設置中不要點安裝,會自動跳出安裝的界面,不要關閉界面,打開命令行用root權限輸入命令cat /var/log/install.log | grep *.dmg, 就會顯示 sh-3.2# cat /var/log/install.log …

算法基礎十

加一 給定一個由 整數 組成的 非空 數組所表示的非負整數,在該數的基礎上加一。最高位數字存放在數組的首位, 數組中每個元素只存儲單個數字。 示例 1: 輸入:digits [1,2,3] 輸出:[1,2,4] 解釋:輸入數組表…

YOLO_embedded: YOLO算法快速嵌入式部署

YOLO_embedded: YOLO算法快速嵌入式部署 for UbuntuBased on YOLOXOpenVINO & TensorRT 本項目提供c和python兩種語言,詳情請見各個文件夾下的README.md 安裝OpenVINO 點此進入官網選擇版本進行下載,然后打開install_openvino.sh將相…

ORACLE 19c 統一恢復處于ASM中的CDB含PDB數據文件到某一個文件目錄下面

NOCDB情況下,要把ASM中的文件恢復到文件系統,大家都知道分別設置每個文件的路徑即可,但如果是租戶環境,每個PDB都有不同路徑,而且每個PDB都有SYSTEM,SYSAUX等一些表空降,不可能放在同一個目錄中…

Linux_CentOS_7.9 VNC安裝卸載以及相關配置開機自啟動服務簡易記錄

VNC安裝卸載以及相關配置開機自啟動服務: 查看環境:(yum鏡像源配置可以參考我之前文章里面有詳細參考http://t.csdnimg.cn/mzGoI) [rootorcl238 ~]# rpm -qa | grep vnc ##查看系統現有VNC軟件版本 gtk-vnc2-0.7.0-3.el7.x86…

道可云元宇宙每日資訊|青島市元宇宙領域新產品推介暨產學研對接會舉行

道可云元宇宙每日簡報(2023年12月7日)訊,今日元宇宙新鮮事有: 青島市元宇宙領域新產品推介暨產學研對接會舉行 為加快推動青島市元宇宙技術和產業創新,引領下一代互聯網發展,青島市元宇宙領域新產品推介暨…

算法基礎九

螺旋矩陣2 給你一個正整數 n ,生成一個包含 1 到 n2 所有元素,且元素按順時針順序螺旋排列的 n x n 正方形矩陣 matrix。 示例 1: 輸入:n 3 輸出:[[1,2,3],[8,9,4],[7,6,5]] 示例 2: 輸入:n …

第12節: Vue3 修飾符

如何在UniApp中使用Vue3框架使用修飾符&#xff1a; <template> <view> <button click"toggleVisibility ^ :disabledisDisabled">點擊切換顯示狀態</button> <text>{{ isVisible ? 顯示 : 隱藏 }}</text> </view> …

簡易加減運算器的制作----數字電路設計(含proteus仿真)

簡易加減運算器的制作 一、功能要求—基本功能 1、自制0-9按鍵&#xff0c;在一個LED數碼管上穩定地顯示當前按下的值。&#xff08;基本功能&#xff09; 2、增加、兩個按鍵&#xff0c;實現0-9兩個一位數的加法運算&#xff0c;同時在兩位LED上穩定地顯示運算結果。&#…

React中每次渲染都會傳入一個新的props.children到子組件?

傳入props.children后, 為什么會導致組件的重新渲染&#xff1f; 問題描述 在 react 中, 我想要對組件的渲染進行優化, 遇到了一個非常意思的問題, 當我向一個組件中傳入了 props.children 之后, 每次父組件重新渲染都會導致這個組件的重新渲染; 它看起來的表現就像是被memo包…