文本处理常用操作
這里介紹一下文本預處理中常用的操作:
1.英文統一小寫
text = text.lower()?
2.分詞
def cut(text):# return list(jieba.cut(text))return [item for item in jieba.cut(text.lower())] if text != "" else []?
3.去噪
兩種方式
(1)去停用詞
包括中英文標點符號、以及噪音詞,參考附錄[1]
stopwords = set([line.strip() for line in codecs.open("data/stopwords.txt", "r")])def cut_and_remove_stopwords(text):return [item for item in jieba.cut(text.lower()) if item not in Utils.stopwords] if text != "" else []?
(2)只保留指定詞典中的詞
這個詞典與任務強相關,通常是當前任務重點關注的特征詞
def cut_and_in_vocabulary(text):return [item for item in jieba.cut(text.lower()) if item in Utils.vocabulary] if text != "" else []其中,為了保證分詞的結果是我們想要的,通常需要調整jieba詞典:
file_vocabulary = "data/vocabulary.txt"jieba.load_userdict(file_vocabulary)vocabulary = set([line.strip() for line in codecs.open(file_vocabulary, "r")])file_jieba_delete_dict = "data/jieba_delete_dict.txt"for wd in [line.strip() for line in codecs.open(file_jieba_delete_dict, "r")]: jieba.del_word(wd)詳細說明參考:fxsjy/jieba: 結巴中文分詞
??
附錄[1]:停用詞表(其中有兩行分別是中英文的空格)
, . ? !, 。 ? ! 不好意思 抱歉 謝謝 這邊 那邊 那個 這個 那樣 這種 那種 我想 這兒 這樣 還 也 額 呃 嗯 噢 那 哎 先 后 啊 哦 吧 呀 啦 哈 誒 咯 恩 阿 呢 嗎 的 了 常見停用詞?
Pandas數據處理常用操作:https://www.cnblogs.com/bymo/p/7154476.html
?
Sklearn數據處理常用操作:
# 連續特征規范化處理from sklearn.preprocessing import MinMaxScaler, Normalizer, StandardScalerscaler = StandardScaler() # 標準化:零均值,單位方差scaler = MinMaxScaler(feature_range=(0, 1)) # 變換到[0, 1]區間 (也可以是其它固定最大最小值的區間)scaler = Normalizer(norm="l2") # 正則化:'l1', 'l2', or 'max', optional ('l2' by default)# The norm to use to normalize each non zero sample.# l2_norm變換后每個樣本的各維特征的平方和為1。類似地,l1_norm變換后每個樣本的各維特征的絕對值和為1;max_norm變換將每個樣本的各維特征除以該樣本的最大值df["0108"] = StandardScaler().fit_transform(df["0108"].values.reshape(-1, 1))# 因為type(df["0108"])是一個pandas.core.series.Series,所以要用values把值取出來;# 因為df["0108"].values.shape是(57298,),所以需要用reshape使它變成行數不限,列數為1df["0108"] = df["0108"].rank() # 對數值進行排序,使得數據變成一種稠密的表達,使得模型對數值不敏感# 類別特征處理# 參考:https://blog.csdn.net/bryan__/article/details/79911768data = pd.get_dummies(df, columns=["label"], dummy_na=True) # 獲得稠密的表達,適合小數據量;這里dummy_na=True表示將空值也加進來 # 獲得啞變量from sklearn.preprocessing import LabelEncoder, OneHotEncoderfrom scipy import sparsedf["label"] = LabelEncoder().fit_transform(df["label"]) # 編碼data = sparse.hstack(df, OneHotEncoder().fit_transform(df["label"])) # 獲得稀疏的表達,適合大數據量 # 將原始數據和OneHot后的數據進行橫向拼接,再進行稀疏化# hstack表示橫向拼接;vstack表示縱向拼接# 這里注意的是,稀疏化后的數據不方便進行切分,所以,最好先切分好訓練集和測試集,再分別進行稀疏化# 文本向量化from sklearn.feature_extraction.text import CountVectorizerdf["xxx"] = df["xxx"].apply(lambda x: " ".join(x.split(";")))item_category_list = CountVectorizer().fit_transform(df["xxx"])df = sparse.hstack(item_category_list)"""例子:'a b d''a e'上面是兩個樣本在某個維度上的特征可以看到有四種取值(a b d e),我們可以通過上面的方法把這兩行變成下面這種形式:11101001這里其實就是對每種取值進行計數,提取向量化特征,類似于tfidf處理"""# 連續特征離散化 例如1.0, 2.0, 3.0, ..., 15.0pd.cut(df["xxx"], bins=[0, 5, 10, 15, 20]).head()df["bins"] = pd.cut(df["xxx"], bins=[0, 5, 10, 15, 20])df["bins"][0] # Interval(10, 15, closed='right']df["bins"] = df["bins"].astype("str") # 列類型轉換df["bins"][0] # '(10, 15]'df["pv_bins"] = pd.cut(df["xxx"], bins=[0, 5, 10, 15, 20]).astype("str")df["pv_bins_cate"] = LabelEncoder().fit_transform(df["pv_bins"])df[["xxx", "pv_bins", "pv_bins_cate"]].head() # 原始特征,離散化后的特征,離散化并LabelEncoder編碼后的特征(編碼后還可以進一步做一個OneHot)# 特征二值化 # TODOfrom sklearn.preprocessing import Binarizerdf["xxx"] = Binarizer(threshold=10).fit_transform(df["xxx"].values.reshape(-1, 1))# 評估函數from sklearn.metrics import accuracy_score, confusion_matrix, f1_score, log_loss, \mean_absolute_error, mean_squared_error, precision_score, roc_auc_score# 模型評估與參數搜索from sklearn.linear_model import LogisticRegressionfrom sklearn.model_selection import GridSearchCVtrain_x, train_y = [], []model = LogisticRegression()param_grid = {}grid_search = GridSearchCV(model, param_grid=param_grid, n_jobs=8, verbose=1, cv=5)grid_search.fit(train_x, train_y)best_parameters = grid_search.best_estimator_.get_params()for para, val in list(best_parameters.items()):print(para, val)model = LogisticRegression(max_iter=best_parameters["max_iter"], C=best_parameters["C"])model.fit(train_x, train_y)?
待補充~
轉載于:https://www.cnblogs.com/bymo/p/9104282.html
總結
- 上一篇: 领域驱动设计(2)怎么使用沟通
- 下一篇: git错误fatal: remote o