機器學習監督學習實戰六:五種算法對新聞組英文文檔進行文本分類(20類),詞頻統計和TF-IDF 轉換特征提取方法理論和對比解析

??本文主要介紹了20 Newsgroups數據集及其在文本分類任務中的應用。20 Newsgroups數據集包含約20,000篇新聞組文檔,分為20個不同主題的新聞組,數據集被分為訓練集和測試集。在數據預處理階段,使用了CountVectorizer和TfidfVectorizer兩種方法將文本數據轉換為數值特征,最終選擇了TF-IDF特征用于模型訓練和評估。通過10折交叉驗證評估了多種算法的性能,包括邏輯回歸(LR)、支持向量機(SVM)、分類與回歸樹(CART)、多項式樸素貝葉斯(MNB)和K近鄰(KNN),其中SVM和LR表現較好。進一步對邏輯回歸進行了網格搜索調參準確率達到0.9214%,最終在測試集上驗證了調參后的模型準確率,并生成了分類報告。完整代碼已開源在個人GitHub:https://github.com/KLWU07/Text-classification-of-newsgroup-documents

一、數據集介紹

1.數據集來源與構成

??20 Newsgroups 數據集收集了大約 20,000 左右的新聞組文檔,均勻分為 20 個不同主題的新聞組集合。 20news - bydate - train 和 20news - bydate - test 來自 20 Newsgroups 數據集的 bydate 版本,該版本按時間順序將數據集分為訓練集(約占 60%)和測試集(約占 40%),不包含重復文檔和新聞組名,共包含 18,846 個文檔。數據集信息來自于https://archive.ics.uci.edu/dataset/113/twenty+newsgroups,可下載。

2.數據特點

  • 分類多樣:涵蓋計算機技術、體育、政治、宗教等 20 個不同的主題。
  • 高維度:每篇文章都是由大量的單詞組成。

3.類別信息

1.計算機技術相關
comp.graphics
主題:計算機圖形學、圖像渲染、圖形軟件等(如 OpenGL、3D 建模)。
comp.os.ms-windows.misc
主題:Windows 操作系統相關問題、軟件使用、系統故障等。
comp.sys.ibm.pc.hardware
主題:IBM PC 硬件(如主板、顯卡、硬盤等硬件故障與配置)。
comp.sys.mac.hardware
主題:蘋果 Mac 硬件(如 Mac 電腦、配件、性能優化等)。
comp.windows.x
主題:Windows 系統下的 X 窗口系統(如圖形界面開發、X11 配置等)。2.科學與學術相關
sci.astro
主題:天文學、宇宙學、天文觀測、星系研究等。
sci.crypt
主題:密碼學、加密算法、安全協議、區塊鏈技術(早期相關討論)等。
sci.electronics
主題:電子工程、電路設計、半導體技術、電子元件等。
sci.med
主題:醫學研究、疾病診斷、生物技術、醫療設備等(非臨床實踐,偏學術)。
sci.space
主題:航天工程、太空探索、衛星技術、星際旅行等。3.娛樂與社會文化
rec.autos
主題:汽車愛好、車型討論、汽車改裝、賽車運動等。
rec.motorcycles
主題:摩托車愛好、摩托車型號、騎行體驗、摩托車賽事等。
rec.sport.hockey
主題:冰球運動(如 NHL 賽事、規則討論、球員動態等)。
rec.sport.baseball
主題:棒球運動(如 MLB 賽事、戰術分析、球員數據等)。
misc.forsale
主題:二手交易、商品出售、拍賣信息、商業廣告等(綜合性分類)。4.政治與宗教
talk.politics.misc
主題:綜合政治話題(如政策辯論、選舉分析、國際關系等)。
talk.politics.guns
主題:美國槍支政策、槍械權利、控槍辯論等。
talk.politics.mideast
主題:中東政治(如地區沖突、宗教矛盾、國際關系等)。
talk.religion.misc
主題:綜合宗教討論(如信仰比較、神學爭議、宗教節日等)。
alt.atheism
主題:無神論、宗教批判、哲學討論(與宗教相關的非信仰觀點)。

4.其中一個文檔樣本展示

From: MJMUISE@1302.watstar.uwaterloo.ca (Mike Muise)
Subject: Re: Drinking and Riding    %% 主題 :回復:飲酒與騎行
Lines: 19 							%% 行數 :19
Organization: Waterloo Engineering  %% 組織 :滑鐵盧工程學院In article <C4wKBp.B9w@eskimo.com>, maven@eskimo.com (Norman Hamer) writes:
>  What is a general rule of thumb for sobriety and cycling? Couple hours 
> after you "feel" sober? What? Or should I just work with "If I drink 
> tonight, I don't ride until tomorrow"?
%% 醒酒和騎自行車的一般經驗法則是什么?在你“感覺”清醒后幾個小時?是什么?還是我應該堅持“如果我今晚喝酒,我就等到明天再騎車”?1 hr/drink for the first 4 drinks.       %%4杯酒,每杯酒1小時。
1.5 hours/drink for the next 6 drinks.   %% 接下來的6杯酒,每杯酒1.5小時。
2 hours/drink for the rest.				 %% 其余的酒,每杯酒2小時。These are fairly cautious guidelines, and will work even if you happen to 
have a low tolerance or body mass.
I think the cops and "Don't You Dare Drink & Drive" (tm) commercials will 
usually say 1hr/drink in general, but after about 5 drinks and 5 hrs, you 
could very well be over the legal limit. 
Watch yourself.
%% 這些是比較謹慎的指導方針,即使你碰巧酒量低或者體重輕,也適用。
我認為警察和“不要酒后駕車”(商標)廣告通常會說一般每杯酒1小時,但喝了大約5杯酒并且過了5小時后,你很可能仍然超過法定限度。
注意自己。-Mike________________________________________________/ Mike Muise / mjmuise@1302.watstar.uwaterloo.ca \ no quotes, no jokes,\ Electrical Engineering, University of Waterloo / no disclaimer, no fear.

二、文件特征提取(數據預處理)

??這是自然語言處理(NLP)中處理文本數據的經典流程,用于將非結構化文本轉換為機器學習模型可處理的數值特征。兩種方法都有調用,代碼中同時使用了 CountVectorizer 和 TfidfVectorizer,但最終只使用了 TF-IDF 特征(即 X_train_counts_tf)進行模型訓練和評估。

方法CountVectorizerTfidfVectorizer
核心思想統計詞匯在文本中出現的次數評估詞匯對文本的區分能力(詞頻 × 逆文檔頻率)
權重計算每個詞的權重 = 出現次數每個詞的權重 = TF × IDF
對高頻詞的處理無處理(所有詞平等對待)抑制通用高頻詞(如 “the”),提升稀有詞權重
特征矩陣特點數值非負,可能存在大量重復值數值范圍更廣,重要詞權重更高
文本分類適用于短文本、詞匯分布均勻的場景通常表現更好,尤其在長文本、多類別場景
垃圾郵件檢測可能被 “buy”“free” 等高頻詞誤導能有效識別低頻但關鍵的垃圾詞模式
主題模型(如 LDA)直接使用詞頻更符合概率模型假設可能因權重調整導致主題偏移
計算效率更快(僅需計數)稍慢(需額外計算 IDF)
特征稀疏性更高(大量零值)相對較低(重要詞權重更突出)

1. 詞頻統計(CountVectorizer)

詞頻統計:使用CountVectorizer計算詞頻矩陣。

stop_words='english'
  • 自動過濾英語停用詞(如 “the”, “and”, “is” 等無實際語義的高頻詞),減少噪聲特征。
decode_error='ignore'
  • 忽略無法解碼的字符(如亂碼),確保文本處理的魯棒性。
fit_transform()
  • 訓練(fit):分析所有文本,構建詞匯表(如{“apple”: 0, “banana”: 1, …})。
  • 轉換(transform):將每篇文本轉換為向量,向量維度等于詞匯表大小,每個位置的值表示對應詞匯在文本中的出現次數。

2.TF-IDF 轉換(TfidfVectorizer)

  • TF-IDF 轉換:將詞頻矩陣轉換為 TF-IDF(詞頻 - 逆文檔頻率)矩陣,突出重要詞匯的權重。
    • TF-IDF(Term Frequency-Inverse Document Frequency)是一種統計方法,用于評估詞匯在文本集合中的重要性。
    • 詞頻(TF):詞匯在單個文本中出現的頻率。
      公式:TF = 詞匯在文本中出現次數 / 文本總詞數
    • 逆文檔頻率(IDF):衡量詞匯的普遍重要性(若某詞在所有文本中頻繁出現,則重要性低)。
      公式:IDF = log(總文檔數 / 包含該詞的文檔數 + 1)
    • TF-IDF 值:TF × IDF,值越高表示詞匯對文本的區分能力越強。

3.詞頻統計的局限性

  • 維度災難:詞匯表可能包含數萬甚至數十萬個詞,導致特征矩陣維度極高。
  • 噪聲問題:高頻詞(如 “the”)對分類無幫助,但會占據大量特征空間。

4.TF-IDF 的優勢

  • 特征降維:通過權重調整,弱化普遍詞匯,突出有區分性的詞匯。
  • 語義增強:提升與類別相關的關鍵詞(如在 “comp.graphics” 類別中,“pixel” 的 TF-IDF 值會更高)的權重。

5.特征擴展

  • 嵌入(Word Embedding):使用 Word2Vec、GloVe 等方法捕捉詞匯語義關系(優于 TF-IDF 的詞袋模型)。
  • 文本預處理:結合詞干提取(Stemming)或詞形還原(Lemmatization)進一步減少特征維度。

6.CountVectorizer和TF-IDF()舉例比較

對比還是不一樣的。

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizershili = ['What is a general rule of thumb for sobriety and cycling? Couple hours after you "feel" sober? What? Or should I just work with "If I drink tonight, I do not ride until tomorrow"? ','1 hour drink for the first 4 drinks.','1.5 hours drink for the next 6 drinks.','2 hours drink for the rest.'
]tz = CountVectorizer()
tz1 = CountVectorizer(stop_words='english', decode_error='ignore')
X = tz.fit_transform(shili)
X1 = tz.fit_transform(shili)print(X.shape,X1.shape)
print(X.toarray(),'\n\n',X1.toarray())
print('-'*100)
tz3 = TfidfVectorizer()
Y1 = tz3.fit_transform(shili)tz4 = TfidfVectorizer(stop_words='english', decode_error='ignore')
Y2 = tz4.fit_transform(shili)
print(Y1.shape,Y2.shape)
print(Y1.toarray(),'\n\n',Y2.toarray())
(4, 35) (4, 35)
[[1 1 1 1 1 1 0 1 0 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 1 1 0 1 1 1 1 2 1 1 1][0 0 0 0 0 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0][0 0 0 0 0 1 1 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0][0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0]] [[1 1 1 1 1 1 0 1 0 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 1 1 0 1 1 1 1 2 1 1 1][0 0 0 0 0 1 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0][0 0 0 0 0 1 1 0 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0][0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0]]
----------------------------------------------------------------------------------------------------
(4, 35) (4, 18)
[[0.18272028 0.18272028 0.18272028 0.18272028 0.18272028 0.095351020.         0.18272028 0.         0.09535102 0.18272028 0.0.11662799 0.18272028 0.18272028 0.18272028 0.         0.182720280.18272028 0.18272028 0.         0.18272028 0.18272028 0.182720280.18272028 0.18272028 0.         0.18272028 0.18272028 0.182720280.18272028 0.36544055 0.18272028 0.18272028 0.18272028][0.         0.         0.         0.         0.         0.27604710.41705904 0.         0.52898651 0.2760471  0.         0.528986510.         0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.0.         0.         0.33764523 0.         0.         0.0.         0.         0.         0.         0.        ][0.         0.         0.         0.         0.         0.302241390.45663404 0.         0.         0.30224139 0.         0.0.36968461 0.         0.         0.         0.57918237 0.0.         0.         0.         0.         0.         0.0.         0.         0.36968461 0.         0.         0.0.         0.         0.         0.         0.        ][0.         0.         0.         0.         0.         0.33972890.         0.         0.         0.3397289  0.         0.0.41553722 0.         0.         0.         0.         0.0.         0.         0.65101935 0.         0.         0.0.         0.         0.41553722 0.         0.         0.0.         0.         0.         0.         0.        ]] [[0.27037171 0.27037171 0.14109118 0.         0.27037171 0.270371710.         0.17257476 0.27037171 0.         0.27037171 0.270371710.27037171 0.27037171 0.27037171 0.27037171 0.27037171 0.27037171][0.         0.         0.37919167 0.5728925  0.         0.0.72664149 0.         0.         0.         0.         0.0.         0.         0.         0.         0.         0.        ][0.         0.         0.4574528  0.69113141 0.         0.0.         0.55953044 0.         0.         0.         0.0.         0.         0.         0.         0.         0.        ][0.         0.         0.40264194 0.         0.         0.0.         0.49248889 0.         0.77157901 0.         0.0.         0.         0.         0.         0.         0.        ]]

三、算法評估

1.10折交叉驗證和準確率(箱線圖)

在這里插入圖片描述

實際加載的類別數: 20
類別名稱: ['alt.atheism', 'comp.graphics', 'comp.os.ms-windows.misc', 'comp.sys.ibm.pc.hardware', 'comp.sys.mac.hardware', 'comp.windows.x', 'misc.forsale', 'rec.autos', 'rec.motorcycles', 'rec.sport.baseball', 'rec.sport.hockey', 'sci.crypt', 'sci.electronics', 'sci.med', 'sci.space', 'soc.religion.christian', 'talk.politics.guns', 'talk.politics.mideast', 'talk.politics.misc', 'talk.religion.misc']
(11314, 129782)
(11314, 129782)
LR : 0.902158 (0.008985)
SVM : 0.905958 (0.006622)
CART : 0.660421 (0.010269)
MNB : 0.883951 (0.012686)
KNN : 0.799187 (0.006339)

2.邏輯回歸LR網格搜索GridSearchCV

# 4)算法調參
# 調參LR
param_grid = {}
param_grid['C'] = [0.1, 5, 13, 15]
model = LogisticRegression(C=13, max_iter=1000)
kfold = KFold(n_splits=num_folds,shuffle=True, random_state=seed)
grid = GridSearchCV(estimator=model, param_grid=param_grid, scoring=scoring, cv=kfold)
grid_result = grid.fit(X=X_train_counts_tf, y=dataset_train.target)
print('最優 : %s 使用 %s' % (grid_result.best_score_, grid_result.best_params_))
最優 : 0.9214261277895981 使用 {'C': 15}

3.驗證集驗證準確率

# 6)生成模型
model = LogisticRegression(C=15)
model.fit(X_train_counts_tf, dataset_train.target)
X_test_counts = tf_transformer.transform(dataset_test.data)
predictions = model.predict(X_test_counts)
print(accuracy_score(dataset_test.target, predictions))
print(classification_report(dataset_test.target, predictions))
0.846388741370154precision    recall  f1-score   support0       0.82      0.77      0.79       3191       0.73      0.81      0.77       3892       0.77      0.75      0.76       3943       0.71      0.75      0.73       3924       0.82      0.85      0.84       3855       0.84      0.76      0.80       3956       0.80      0.89      0.84       3907       0.92      0.90      0.91       3968       0.96      0.95      0.96       3989       0.91      0.94      0.92       39710       0.96      0.97      0.96       39911       0.96      0.92      0.94       39612       0.78      0.79      0.78       39313       0.90      0.87      0.88       39614       0.91      0.92      0.91       39415       0.86      0.93      0.89       39816       0.75      0.90      0.82       36417       0.98      0.89      0.93       37618       0.82      0.61      0.70       31019       0.73      0.61      0.66       251accuracy                           0.85      7532macro avg       0.85      0.84      0.84      7532
weighted avg       0.85      0.85      0.85      7532

四、完整代碼

from sklearn.datasets import load_files
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from joblib import dump, load  # 導入模型保存和加載的函數# 1) 導入數據
categories = ['alt.atheism','rec.sport.hockey','comp.graphics','sci.crypt','comp.os.ms-windows.misc','sci.electronics','comp.sys.ibm.pc.hardware','sci.med','comp.sys.mac.hardware','sci.space','comp.windows.x','soc.religion.christian','misc.forsale','talk.politics.guns','rec.autos','talk.politics.mideast','rec.motorcycles','talk.politics.misc','rec.sport.baseball','talk.religion.misc']
# 導入訓練數據
train_path = '20news-bydate-train'
dataset_train = load_files(container_path=train_path, categories=categories)
# 導入評估數據
test_path = '20news-bydate-test'
dataset_test = load_files(container_path=test_path, categories=categories)print("實際加載的類別數:", len(dataset_train.target_names))
print("類別名稱:", dataset_train.target_names)# 計算TF-IDF
tf_transformer = TfidfVectorizer(stop_words='english', decode_error='ignore')
X_train_counts_tf = tf_transformer.fit_transform(dataset_train.data)
# 查看數據維度
print(X_train_counts_tf.shape)# 保存TF-IDF向量器
dump(tf_transformer, 'tfidf_vectorizer.joblib')# 設置評估算法的基準
num_folds = 10
seed = 7
scoring = 'accuracy'# 生成算法模型
models = {}
models['LR'] = LogisticRegression(C=15,n_jobs=-1, max_iter=1000)# 比較算法
results = []
for key in models:kfold = KFold(n_splits=num_folds, shuffle=True, random_state=seed)cv_results = cross_val_score(models[key], X_train_counts_tf, dataset_train.target, cv=kfold, scoring=scoring)results.append(cv_results)print('%s : %f (%f)' % (key, cv_results.mean(), cv_results.std()))# 訓練完整模型(不使用交叉驗證)model = models[key]model.fit(X_train_counts_tf, dataset_train.target)# 保存模型model_filename = f'{key}_model.joblib'dump(model, model_filename)print(f'模型已保存為 {model_filename}')# 保存類別名稱
dump(dataset_train.target_names, 'target_names.joblib')

五.預測

GPT隨機汽車發布會的郵件——car _txt文本格式。

from joblib import load# 加載組件
tf_transformer = load('tfidf_vectorizer.joblib')  # 加載TF-IDF向量化器
model = load('LR_model.joblib')                   # 加載訓練好的模型
target_names = load('target_names.joblib')        # 加載類別名稱# 1. 讀取 `txt` 文件內容
file_path = 'car_1.txt'  # 確保文件路徑正確
with open(file_path, 'r', encoding='utf-8', errors='ignore') as f:text = f.read()# 2. 向量化文本
X_new = tf_transformer.transform([text])  # 注意:輸入必須是列表形式(即使單樣本)print(X_new.shape)
print(X_new.toarray())
# 3. 預測類別
predicted = model.predict(X_new)
predicted_class = target_names[predicted[0]]  # 獲取類別名稱# 4. 輸出結果
print(f"文件 '{file_path}' 的預測類別是: {predicted_class}")
(1, 129782)
[[0. 0. 0. ... 0. 0. 0.]]
文件 'car_1.txt' 的預測類別是: rec.autos

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

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

相關文章

易學探索助手-個人記錄(十四)

項目背景 在大語言模型&#xff08;LLM&#xff09;完成指令微調&#xff08;SFT&#xff09;之后&#xff0c;雖然可以處理開放式問答任務&#xff0c;但在專業領域&#xff08;如《周易》&#xff09;仍面臨知識更新滯后、事實性薄弱等問題。為此&#xff0c;本文介紹如何通…

從“人找政策”到“政策找人”:智能退稅ERP數字化重構外貿生態

離境退稅新政核心內容與外貿企業影響 &#xff08;一&#xff09;政策核心變化解析 退稅商店網絡擴容 新政明確鼓勵在大型商圈、旅游景區、交通樞紐等境外旅客聚集地增設退稅商店&#xff0c;并放寬備案條件至納稅信用M級企業。以上海為例&#xff0c;靜安區計劃新增1000家退…

Pandas 可視化集成:數據科學家的高效繪圖指南

為什么選擇 Pandas 進行數據可視化&#xff1f; 在數據科學和分析領域&#xff0c;可視化是理解數據、發現模式和傳達見解的關鍵步驟。Python 生態系統提供了多種可視化工具&#xff0c;如 Matplotlib、Seaborn、Plotly 等&#xff0c;但 Pandas 內置的可視化功能因其與數據結…

曼昆《經濟學原理》第九版 第十一章公共物品與公共資源

一、物品分類的基本框架 排他性&#xff1a;能否阻止他人使用該物品的特性競爭性&#xff1a;一個人使用是否減少他人使用的特性 根據這兩個特性可將物品分為四類&#xff1a; 私人物品&#xff1a;既有排他性又有競爭性&#xff08;如冰淇淋、衣服&#xff09;公共物品&…

基于大模型預測原發性急性閉角型青光眼的技術方案研究大綱

目錄 一、引言二、技術方案概述三、術前階段(一)數據采集與處理(二)大模型預測(三)手術方案制定(四)麻醉方案確定(五)術前健康教育四、術中階段(一)實時數據監測與輸入(二)手術策略動態調整(三)并發癥預警與處理(四)術中健康教育五、術后階段(一)恢復監測與…

基于React 的 AntD 庫進行前端開發過程中的問題匯總

背景 最近寫了半個月的 React 前端&#xff0c;三年沒寫過 React 前端了&#xff0c;有些生疏了&#xff0c;匯總一下 基于React 前端的 antD 庫編寫過程中的低級問題吧。 PS 一下&#xff0c;半個月沒有發布博客了&#xff0c;C站產品經理又悄默默地改了樣式&#xff0c;博客…

Spring @Scheduled vs XXL-JOB vs DolphinScheduler vs Airflow:任務調度框架全景對比

引言 從單機定時任務到分布式工作流調度&#xff0c;不同場景需要選擇匹配的調度框架。 本文對比 Spring Scheduled、XXL-JOB、DolphinScheduler &#xff08;海豚調度器&#xff09;和 Apache Airflow 的核心差異&#xff0c;助你避免過度設計或功能不足。 一、核心定位與適用…

springMVC-10驗證及國際化

驗證 概述 ● 概述 1. 對輸入的數據(比如表單數據)&#xff0c;進行必要的驗證&#xff0c;并給出相應的提示信息。 2. 對于驗證表單數據&#xff0c;springMVC提供了很多實用的注解, 這些注解由JSR303 驗證框架提供. ●JSR 303 驗證框架 1. JSR 303 的含義 JSR&#xff0…

OpenCV 滑動條調整圖像對比度和亮度

一、知識點 1、int createTrackbar(const String & trackbarname, const String & winname, int * value, int count, TrackbarCallback onChange 0, void * userdata 0); (1)、創建一個滑動條并將其附在指定窗口上。 (2)、參數說明: trackbarname: 創建的…

ReadWriteLock(讀寫鎖)和 StampedLock

1. ReadWriteLock&#xff08;讀寫鎖&#xff09;&#xff1a;實現高性能緩存 總結&#xff1a; 要點 內容 適用場景 讀多寫少、高并發讀取場景&#xff08;如緩存&#xff09; 鎖類型 ReadWriteLock接口&#xff0c;ReentrantReadWriteLock實現 讀鎖 vs 寫鎖 多線程可…

【決勝公務員考試】求職OMG——見面課測驗1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答題&#xff0c;大家注意呀&#xff01; 博主碼字不易點個關注吧,祝期末順利~~ 1.單選題(2分) 下列說法錯誤的是:&#xff08; B &#xff09; A.選調生屬于公務員系統 B.公務員屬于事業編 C.選調生有基層鍛煉的要求 D…

vue3 el-button 自定義本地圖標

設置不生效的原因可能有&#xff1a;1.style標簽里沒加scoped <style scoped></style>2.本地圖片路徑指向錯誤3.自定義圖片長寬沒設置4.deep深度選擇器使用錯誤&#xff0c;vue3用:deep() <el-tooltip content"重新匹配" placement"top"&g…

如何在最短時間內提升打ctf(web)的水平?

剛剛刷完2遍 bugku 的 web 題&#xff0c;前來答題。 每個人對刷題理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟著writeup做了一遍就等于刷了&#xff0c;還有的人是獨立思考做了一遍就等于刷了。…

6.8 note

paxos算法_初步感知 Paxos算法保證一致性主要通過以下幾個關鍵步驟和機制&#xff1a; 準備階段 - 提議者向所有接受者發送準備請求&#xff0c;請求中包含一個唯一的編號。 - 接受者收到請求后&#xff0c;會檢查編號&#xff0c;如果編號比它之前見過的都大&#xff0c;就會承…

c++ openssl 使用 DES(數據加密標準)進行加密和解密的基本操作

使用 DES&#xff08;數據加密標準&#xff09;進行加密和解密的基本操作&#xff0c;重點展示了 ECB 和 CBC 模式&#xff0c;并且通過篡改密文的方式來進行攻擊。下面是對每個部分的詳細解析。 1. 結構體 Slip struct Slip {char from[16] { 0 }; // 交易的發起者&#x…

OpenWrt:使用ALSA實現邊錄邊播

ALSA是Linux系統中的高級音頻架構&#xff08;Advanced Linux Sound Architecture&#xff09;。目前已經成為了linux的主流音頻體系結構&#xff0c;想了解更多的關于ALSA的知識&#xff0c;詳見&#xff1a;http://www.alsa-project.org 在內核設備驅動層&#xff0c;ALSA提供…

【.net core】天地圖坐標轉換為高德地圖坐標(WGS84 坐標轉 GCJ02 坐標)

類文件 public static class WGS84ToGCJ02Helper {// 定義一些常量private const double PI 3.14159265358979324;private const double A 6378245.0;private const double EE 0.00669342162296594323;// 判斷坐標是否在中國范圍內&#xff08;不在國內則不進行轉換&#x…

Matlab自學筆記五十七:符號運算、可變精度運算、雙精度浮點型運算,三種運算精度的概念、比較、選擇和應用

1.可變精度算術的概念 默認的&#xff0c;Matlab雙精度浮點數使用16位數字精度&#xff0c;而符號數學工具箱的vpa函數&#xff0c;提供了無限大的可變精度&#xff0c;它默認使用32位數字精度&#xff0c;32位指的是有效數字的位數&#xff1b; 2.具體用法 程序示例&#x…

由匯編代碼確定switch語句

int switch2(int x) {int result0;switch(x){/* switch語句主體缺失 */}return result; }在編譯函數時&#xff0c;GCC為程序的初始部分以及跳轉表生成了如下匯編代碼。 1 MOVL 8(%ebp), %eax ;x位于相對于寄存器%ebp偏移量為8的地方。 2 ADDL $2, %eax …

java 使用HanLP 入門教程

1. 安裝 HanLP Maven 依賴 <dependency><groupId>com.hankcs</groupId><artifactId>hanlp</artifactId><version>portable-1.8.4</version> <!-- 最新版本請查看官網 --> </dependency>注意&#xff1a;portable 版本…