色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python自然語言用金庸的武俠小說做分析和處理

馬哥Linux運維 ? 來源:未知 ? 作者:李倩 ? 2018-03-23 16:01 ? 次閱讀

最近在了解到,在機器學(xué)習(xí)中,自然語言處理是較大的一個分支。存在許多挑戰(zhàn)。例如: 如何分詞,識別實體關(guān)系,實體間關(guān)系,關(guān)系網(wǎng)絡(luò)展示等。

我用Jieba + Word2vec + NetworkX 結(jié)合在一起,做了一次自然語言分析。語料是 倚天屠龍記。 之前也有很多人用金庸的武俠小說做分析和處理,希望帶來一些不同的地方。截幾張圖來看看:

所有人物的相似圖連接。

關(guān)系同上。展示形式為多中心結(jié)構(gòu)

以張無忌的不同身份為中心的網(wǎng)絡(luò)關(guān)系圖。

這次分析的不一樣之處主要是:

1、Word2Vec的相似度結(jié)果 - 作為后期社交網(wǎng)絡(luò)權(quán)重

2、NetworkX中分析和展示

上面兩個方法結(jié)合起來,可以大幅減少日常工作中閱讀文章的時間。 采用機器學(xué)習(xí),可以從頭到尾半自動抽取文章中的實體信息,節(jié)約大量時間和成本。 在各種工作中都有利用的場景, 如果感興趣的朋友,可以聯(lián)系合作。

先來看看,用Word2Vec+NetworkX 可以發(fā)現(xiàn)什么。

一、分析結(jié)果

實體的不同屬性(張無忌的總多馬甲)

張無忌,無忌,張教主,無忌哥哥,張公子。同一個張無忌有多個身份,不同身份又和不同的人聯(lián)系,有不一樣的相似度。

先來看看圖:

無忌哥哥是過于親密的名字,一般不喊。好似和這個詞相似度高的都是比較奇怪的角色。

無忌是關(guān)系熟了以后,平輩或者長輩可以稱呼的名字。還有周姑娘,殷姑娘等

張無忌是通用的名字,人人可以稱呼 和馬甲聯(lián)系密切。

張公子是禮貌尊稱。 例如,黃衫女子,汝陽王等

張教主是頭銜。既要尊重,也表示其實不太熟,有時還有些敵意。 例如: 朱元璋

注:

1、圖是Networkx 基于Word2vex畫出來了,上面的描述是我的人工分析。

2、趙敏不在上面的網(wǎng)絡(luò)關(guān)系圖中。Word2Vec計算出來 張無忌和趙敏 相似度不太高。有些出乎我的意料。 仔細回憶一下,當(dāng)年看此書時,突然就發(fā)現(xiàn)二人在一起了,顯得比較突兀。推想起來,書中世界二人成婚了,如果變成現(xiàn)實世界,二人關(guān)系比較懸。

二、實現(xiàn)過程

主要步驟:

準備語料

倚天屠龍記 小說的文本文件

自定義分詞詞典 (小說中的人物名,網(wǎng)上有現(xiàn)成的,約180個)

停用詞表

準備工具

Python Pandas, Numpy,Scipy(標準庫)

Jieba(中文分詞)

Word2vec (單詞向量化工具,可以計算單詞之間的詳細度)

Networks(網(wǎng)絡(luò)圖工具,用于展示復(fù)雜的網(wǎng)絡(luò)關(guān)系

數(shù)據(jù)預(yù)處理

文本文件轉(zhuǎn)發(fā)成utf8(pandas)

文本文件分句,分詞(Jieba)

文本文件分句,分詞, 分析詞性,主要是人名(Jieba)

更新自定義詞典,重新分詞(整個過程需要幾遍,直至滿意)

手工少量刪除(分詞出來的人名誤判率不高,但是還是存在一些。例如:趙敏笑道,可以被識別的 一個叫 趙敏笑的人。 這部分工作還需要手工做。 除非有更好的分詞工具,或者可以訓(xùn)練的分詞工具,才能解決這一問題。

Word2Vec 訓(xùn)練模型。這個模型可以計算兩個人之間的相似度

采用300個維度

過濾詞頻小于20次

滑動窗口 為20

下采樣:0.001

生成實體關(guān)系矩陣。

網(wǎng)上沒找找到現(xiàn)成庫,我就自己寫了一個。

N*N 維度。 N是人名數(shù)量。

用上面WordVec的模型來,填充實體關(guān)系矩陣

NetworkX 生成網(wǎng)絡(luò)圖

節(jié)點是人名

邊是兩個節(jié)點之間的線條。也就是兩個人之間的關(guān)系。

三、部分代碼實現(xiàn)

初始化

import numpy as np

import pandas as pd

import jieba

import jieba.posseg as posseg

%matplotlib inline

數(shù)據(jù)分詞,清洗

renming_file = "yttlj_renming.csv"

jieba.load_userdict(renming_file)

stop_words_file = "stopwordshagongdakuozhan.txt"

stop_words = pd.read_csv(stop_words_file,header=None,quoting=3,sep=" ")[0].values

corpus = "yttlj.txt"

yttlj = pd.read_csv(corpus,encoding="gb18030",header=None,names=["sentence"])

def cut_join(s):

new_s=list(jieba.cut(s,cut_all=False)) #分詞

#print(list(new_s))

stop_words_extra =set([""])

for seg in new_s:

if len(seg)==1:

#print("aa",seg)

stop_words_extra.add(seg)

#print(stop_words_extra)

#print(len(set(stop_words)| stop_words_extra))

new_s =set(new_s) -set(stop_words)-stop_words_extra

#過濾標點符號

#過濾停用詞

result = ",".join(new_s)

return result

def extract_name(s):

new_s=posseg.cut(s) #取詞性

words=[]

flags=[]

for k,v in new_s:

if len(k)>1:

words.append(k)

flags.append(v)

full_wf["word"].extend(words)

full_wf["flag"].extend(flags)

return len(words)

def check_nshow(x):

nshow = yttlj["sentence"].str.count(x).sum()

#print(x, nshow)

return nshow

# extract name & filter times

full_wf={"word":[],"flag":[]}

possible_name = yttlj["sentence"].apply(extract_name)

#tmp_w,tmp_f

df_wf = pd.DataFrame(full_wf)

df_wf_renming = df_wf[(df_wf.flag=="nr")].drop_duplicates()

df_wf_renming.to_csv("tmp_renming.csv",index=False)

df_wf_renming = pd.read_csv("tmp_renming.csv")

df_wf_renming.head()

df_wf_renming["nshow"] = df_wf_renming.word.apply(check_nshow)

df_wf_renming[df_wf_renming.nshow>20].to_csv("tmp_filtered_renming.csv",index=False)

df_wf_renming[df_wf_renming.nshow>20].shape

#手工編輯,刪除少量非人名,分詞錯的人名

df_wf_renming=pd.read_csv("tmp_filtered_renming.csv")

my_renming = df_wf_renming.word.tolist()

external_renming = pd.read_csv(renming_file,header=None)[0].tolist()

combined_renming = set(my_renming) |set(external_renming)

pd.DataFrame(list(combined_renming)).to_csv("combined_renming.csv",header=None,index=False)

combined_renming_file ="combined_renming.csv"

jieba.load_userdict(combined_renming_file)

# tokening

yttlj["token"]=yttlj["sentence"].apply(cut_join)

yttlj["token"].to_csv("tmp_yttlj.csv",header=False,index=False)

sentences = yttlj["token"].str.split(",").tolist()

Word2Vec 向量化訓(xùn)練

# Set values for various parameters

num_features = 300 # Word vector dimensionality

min_word_count = 20 # Minimum word count

num_workers = 4 # Number of threads to run in parallel

context = 20 # Context window size

downsampling = 1e-3 # Downsample setting for frequent words

# Initialize and train the model (this will take some time)

from gensim.models import word2vec

model_file_name = 'yttlj_model.txt'

#sentences = w2v.LineSentence('cut_jttlj.csv')

model = word2vec.Word2Vec(sentences, workers=num_workers,

size=num_features, min_count = min_word_count,

window = context,

sample = downsampling

)

model.save(model_file_name)

建立實體關(guān)系矩陣

entity = pd.read_csv(combined_renming_file,header=None,index_col=None)

entity = entity.rename(columns={0:"Name"})

entity = entity.set_index(["Name"],drop=False)

ER = pd.DataFrame(np.zeros((entity.shape[0],entity.shape[0]),dtype=np.float32),index=entity["Name"],columns=entity["Name"])

ER["tmp"] = entity.Name

def check_nshow(x):

nshow = yttlj["sentence"].str.count(x).sum()

#print(x, nshow)

return nshow

ER["nshow"]=ER["tmp"].apply(check_nshow)

ER = ER.drop(["tmp"],axis=1)

count = 0

for i in entity["Name"].tolist():

count +=1

if count % round(entity.shape[0]/10) ==0:

print("{0:.1f}% relationship has been checked".format(100*count/entity.shape[0]))

elif count == entity.shape[0]:

print("{0:.1f}% relationship has been checked".format(100*count/entity.shape[0]))

for j in entity["Name"]:

relation =0

try:

relation = model.wv.similarity(i,j)

ER.loc[i,j] = relation

if i!=j:

ER.loc[j,i] = relation

except:

relation = 0

ER.to_hdf("ER.h5","ER")

NetworkX 展示人物關(guān)系圖

import networkx as nx

import matplotlib.pyplot as plt

import pandas as pd

import numpy as np

import pygraphviz

from networkx.drawing.nx_agraph import graphviz_layout

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機器學(xué)習(xí)
    +關(guān)注

    關(guān)注

    66

    文章

    8407

    瀏覽量

    132567
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4792

    瀏覽量

    84629
  • 自然語言
    +關(guān)注

    關(guān)注

    1

    文章

    287

    瀏覽量

    13347

原文標題:Python自然語言處理分析倚天屠龍記

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    python自然語言

    最近,python自然語言是越來越火了,那么什么是自然語言自然語言(Natural Language )廣納了眾多技術(shù),對自然或人類
    發(fā)表于 05-02 13:50

    NLPIR語義分析是對自然語言處理的完美理解

    和邏輯表示。語義分析就是對信息所包含的語義的識別,并建立一種計算模型,使其能夠像人那樣理解自然語言。語義分析自然語言理解的根本問題,它在自然語言
    發(fā)表于 10-19 11:34

    自然語言處理怎么最快入門?

    `本文整理自知乎上的一個問答,分享給正在學(xué)習(xí)自然語言處理的朋友們!一、自然語言處理是什么?自然語言
    發(fā)表于 11-28 10:02

    hanlp漢語自然語言處理入門基礎(chǔ)知識介紹

    人工智能。自然語言處理涉及的幾個層次:作為輸入一共有兩個來源,語音與文本。所以第一級是語音識別和OCR或分詞(事實上,跳過分詞雖然理所當(dāng)然地不能做句法分析,但字符級也可以直接不少應(yīng)用
    發(fā)表于 01-02 14:43

    【推薦體驗】騰訊云自然語言處理

    自然語言處理技術(shù)的功勞。可以說,只要有大量文本數(shù)據(jù)的應(yīng)用場景,幾乎都涉及到NLP技術(shù),也都可以使用相關(guān)自然語言處理產(chǎn)品的接口來智能
    發(fā)表于 10-09 15:28

    自然語言處理語言模型

    自然語言處理——53 語言模型(數(shù)據(jù)平滑)
    發(fā)表于 04-16 11:11

    Python自然語言處理學(xué)習(xí)筆記:建立基于特征的文法

    Python自然語言處理(第二版)-Steven Bird等》學(xué)習(xí)筆記:第09章 建立基于特征的文法
    發(fā)表于 04-26 12:38

    什么是自然語言處理

    什么是自然語言處理自然語言處理任務(wù)有哪些?自然語言處理的方法是什么?
    發(fā)表于 09-08 06:51

    什么是自然語言處理_自然語言處理常用方法舉例說明

    自然語言處理是計算機科學(xué)領(lǐng)域與人工智能領(lǐng)域中的一個重要方向。它研究能實現(xiàn)人與計算機之間自然語言進行有效通信的各種理論和方法。自然語言
    發(fā)表于 12-28 16:56 ?1.8w次閱讀
    什么是<b class='flag-5'>自然語言</b><b class='flag-5'>處理</b>_<b class='flag-5'>自然語言</b><b class='flag-5'>處理</b>常用方法舉例說明

    自然語言處理怎么最快入門_自然語言處理知識了解

    自然語言處理就是實現(xiàn)人機間自然語言通信,實現(xiàn)自然語言理解和自然語言生成是十分困難的,造成困難的根本原因是
    發(fā)表于 12-28 17:10 ?5309次閱讀

    自然語言處理(NLP)的學(xué)習(xí)方向

    自然語言處理(Natural Language Processing,NLP)是計算機科學(xué)領(lǐng)域與人工智能領(lǐng)域中的一個重要方向。它研究人與計算機之間自然語言進行有效通信的理論和方法。融
    的頭像 發(fā)表于 07-06 16:30 ?1.3w次閱讀

    自然語言處理是什么?有什么

    自然語言處理” (Natural Language Processing,簡稱NLP) 是近年來科技界最熱門的詞語之一,也是當(dāng)下人工智能研究最熱門的領(lǐng)域之一。自然語言處理推動著
    的頭像 發(fā)表于 02-08 16:00 ?6186次閱讀

    自然語言處理的概念和應(yīng)用 自然語言處理屬于人工智能嗎

      自然語言處理(Natural Language Processing)是一種人工智能技術(shù),它是研究自然語言與計算機之間的交互和通信的一門學(xué)科。自然語言
    發(fā)表于 08-23 17:31 ?1563次閱讀

    使用Python進行自然語言處理

    在探討使用Python進行自然語言處理(NLP)的廣闊領(lǐng)域時,我們首先需要理解NLP的基本概念、其重要性、Python在NLP中的優(yōu)勢,以及如何通過
    的頭像 發(fā)表于 07-04 14:40 ?441次閱讀

    ASR與自然語言處理的結(jié)合

    。以下是對ASR與自然語言處理結(jié)合的分析: 一、ASR與NLP的基本概念 ASR(自動語音識別) : 專注于將人類的語音轉(zhuǎn)換為文字。 涉及從聲音信號中提取特征,并將這些特征映射到文本。 NLP(
    的頭像 發(fā)表于 11-18 15:19 ?393次閱讀
    主站蜘蛛池模板: 洗濯屋H纯肉动漫在线观看| 无码AV毛片色欲欧洲美洲| 手机精品在线| 野花日本韩国视频免费高清观看| 99久久99久久精品国产片果冻| 国产第81页| 美女张开腿让男人桶爽无弹窗 | 亚洲乱妇88网| TUBE8最新日本护士| 精品国产品在线18年| 日韩精品人成在线播放| 亚洲午夜精品久久久久久抢| www色小姐| 久久精品亚洲| 色欲AV精品人妻一区二区三区 | 国精产品一区一区三区M| 男人和女人全黄一级毛片| 亚洲.日韩.欧美另类| AV一区AV久久AV无码| 韩国污动漫无遮掩无删减电脑版| 欧美四虎精品二区免费| 亚洲一区精品伊人久久伊人| G0GO人体大尺香蕉| 久久99re66热这里只有精品| 手机在线成人精品视频网| 97精品在线| 精品人妻伦一二三区久久AAA片| 日本VA在线视频播放| 中文国产在线观看| 国产网红主播精品福利大秀专区| 强奸日本美女小游戏| 男人舔女人的阴部黄色骚虎视频| 羲义嫁密着中出交尾gvg794| 草莓视频在线观看完整高清免费| 精品国产人妻国语| 外女思春台湾三级| 99视频导航| 蕾丝边娱乐网| 亚洲嫩草AV永久无码精品无码| 古代荡女丫鬟高H辣文纯肉| 免费精品国产人妻国语|