您当前的位置:网站首页>十堰,本田奥德赛-2019星势力重磅来袭,娱乐明星全知道

十堰,本田奥德赛-2019星势力重磅来袭,娱乐明星全知道

2019-08-11 07:32:03 投稿作者:admin 围观人数:180 评论人数:0次

大数据文摘出品

来历:Qiita

编译:李欣月、刘俊寰

作为我国四大名著之一,三国的故事天然备受国人喜爱和追捧,可是谁又能想到三国居然在日本也“出了圈”,举个比方,吴宇森导演的电影《赤壁》在日本的票房收入超越国内,一同该电影也是日本影史上票房最高的华语电影。

不只在影视职业,三国由于其一同具有前史、战略、动作、人物等许多元素,在日本游戏职业的发展势头也适当迅猛,其间日本荣耀株式协会就开发了包含《三国志》在内的一系列游戏,备受好评。

人物是三国故事经久不衰的要害因素之一,进场的许多杂乱人物究竟孰优孰劣成为三国游戏得以树立的条件,可是从小说自身来看,它在文本意义上果真如此吗?

怀着这样的疑问,一个日本小哥哥(@youwht)就运用AI对三国中的人物进行了一次深扒,经过“天然言语处理”和“机器学习”来剖析三国文本,更新了三国游戏中的武将排名,得出了很风趣的定论,比方,张飞比关羽还能打,武力值高居榜首,而在“政治谋略”上,诸葛亮则比两大主公——曹操和刘备都更胜一筹,而姜维作为诸葛亮的传人,也被剖分出是最挨近诸葛亮的人物。

不只剖分出的效果好玩,这位作者的言语风格也十分有意思,代码外还有各种人物心里戏乱入,几乎复原了一个懂AI的三国小剧场。

大数据文摘企图原文复原这篇风趣的blog,一同看看,这位酷爱三国的日本程序员,是怎样用AI帮三国武将们从头徘名的。

链接:

https://qiita.com/youwht/items/92056e63498c36de4e3b

草庐三顾——布景介绍

关羽:“喂,咱们的英雄事迹是怎样在后世传达的呢?”

孔明:“是像《苍天航路》相同从扇子中传出一道光?仍是在《SD三国高达传》里和机动兵士高达交融在一同?乃至是在《一骑当千,龙之命运》里变成萌萌的女人人物?”

有人只看图就能分辨出谁是谁吗?

刘禅:“你们这些人要么具有100的智商,要么具有99的武力,在后世必定会遭到优待,就算有101个我也赢不了你们。”

魏延:“但咱们看起来很像原始人好吧……”

孔明:“我有100的智商是天经地义的呀!”

司马懿:“喂,终究赢的人是我吧?”

荀彧:“不对不对,如同我才是王佐之才……”

甘宁:“我才是最强的!”

张辽:“张辽在此,最强的是我!”

张飞:“你们莫非是忘了我的存在么?!”

【究竟谁的智商和武力更胜一筹呢?豪杰们的争辩渐趋白热化……】

曹操:“咱们静一静,听我一言,传闻最近AI很火,要不去看看AI是怎样解说的。”

三国鼎立——定论

怀着对KOEI各大武将位置的崇高敬意,名门闺杀咱们将运用“天然言语解析”和“机器学习”处理小说文本内容,各位武将的排名会发作怎样的改动呢?(心里os:这不过是糟蹋技术的无双乱舞罢辽)

本次给咱们介绍一个谁都能运用的技术:只需求Colaboratory,不必结构环境就能进行“三国剖析”。在此咱们尽可能地简略描绘,以便咱们仅用复制粘贴就能上手测验。

称号

本次试验的效果

(参阅)KOEI三国志5的数据

曹操

95, 92, 87, 105

87, 96, 97, 98

刘备

89, 89, 84, 105

79', 77, 80,'99

诸葛亮

78, 98, 90, 1十堰,本田奥德赛-2019星实力重磅来袭,文娱明星全知道04

60, 100, 96, 97

关羽

92, 75, 62, 82

99, 83, 64, 96

张飞

97, 61, 44, 77

99, 45, 17, 44

魏延

91, 65, 50, 68

94, 48, 37, 56

袁绍

70, 71, 66, 77

81, 77, 49, 92

注:从左到右的次序是(武力、智商、政治、魅力)

本文的文本输入选用的是日本作家吉川英治依据《三国演义》改写的现代版小说《三国》@青空文库。经过“天然言语处理”和“机器学习”,推导出了上述武力、智力等参数。

简略来说,这儿的机器学习便是把一个武将变换成50次元向量,再将向量放进完全相同的“公式”中得到一个值,这个值便是表中的参数。

此次研讨的主题是,经过“小说(天然言语)”⇒“数值化”⇒“公式”的流程能否计算出各位武将的武力/智力。

来感受一下各位武将的“推导”进程!(摘抄于实践输出效果):

  • 比较挨近诸葛亮的人是谁?

⇒ 姜维、司马懿、陆逊、周瑜、魏延、马谡

  • 刘备具有关羽,那么曹操具有谁呢?

⇒ 袁绍、张辽

※由于年青时分就互相了解,所以袁绍更胜一筹?

  • 孙权有鲁肃辅佐,刘备又对应谁呢?

⇒ 司马徽(水镜先生)、徐庶

※介绍贤者的职位是什么?

为了得到高精确度的效果,将《三国》这种特别的小说进行天然言语处理(天然言语的前处理)是最重要的。从卖草鞋到成为蜀汉皇帝,每次剖析的改进,都想让咱们享受用代码解读三国的高兴。

机器学习的效果当然风趣,但从天然言语剖析的视点来看,仅用一本小说制造得出的精确度还有待商讨。假如想真实决议游戏的参数,需求预备许多的小说和文本作为INPUT。(本次研讨的意图便是查验这种操作是否可行,并不是想用这个来决议实践参数)

全国三分之计——全体政策/目录

曹操:“AI!AI!”

杨修:“OK!处理了,三军击溃!”

刘备:“等等,这就完毕了?”

杨修:“刘备,你知道AI嘛?”

刘备:“孔明!交给你了,接下来让你扮演!”

孔明:“……”

刘备:“赶忙的!”

孔明:“那么我就像全国三分的策略相同,分三个过程来阐明这次的方案。”

刘备:(“如同不分三步就说不出来似的……”)

本次流程分为以下三步:

阻挠咱们正确认识三国国际的壁垒如下:

  • 韩玄,刘度,赵范,金旋(AI知道咱们荆州四杰么?)
  • 玄德=刘玄德=刘备玄德⇒“刘备”

那么就让咱们开端榜首步的形状剖析吧!

桃园结义——环境预备

“不求同年同月同日生,但求同年同月同日死!”

此次立下结拜兄弟誓词的最佳道具是以下3点:

  • Colaboratory:在浏览器上可以免费运用的Python运转环境
  • Janome:环境构建轻松的形状剖析器
  • Word2Vec:将天然言语数值化/矢量化的模型

首要凭借Colaboratory和Janome制造出最简略的天然言语处理办法。(可以凭借电脑的浏览器亲手测验一下)

Colaboratory的预备:拜访Colaboratory(需求Google账户),根本的运用是检索器,不需求环境构筑,只用浏览器就能编程。

先测验制造:“文件夹”⇒“Python3新的笔记本”。由于想要保存此次在GoogleDrive中运用的各种数据,所以请经过以下指令装置GoogleDrive。

GoogleDriveのマウント# これを実行すると、認証用URLが表明されて、キーを入力すると# 「drive/My Drive/」の中に、認証したアカウントのgoogle driveが入るfrom google.colab imp十堰,本田奥德赛-2019星实力重磅来袭,文娱明星全知道ort drivedrive.mount('/content/drive')

将日语区别开来进行品词断定等,装置Janome。

在Colaboratory中,但凡指令开始有“!”的句子,都能执行命令解说程序。

Janomeのインストール!pip install janome

然后马上测验着用Janome着抽出名词动词。

Janomeで形態素解析(名詞・動詞の抽出)#素状態のJanomeの功能を確認する# Janomeのロードfrom janome.tokenizer import Tokenizer# Tokenneizerインスタンスの生成 tokenizer = Tokenizer()# テキストを引数として、形態素解析の結果、名詞・動詞原型のみを配列で抽出する関数def extract_words(text): tokens = tokenizer.tokenize(text) return [token.base_form for token in tokens if token.part_of_speech.split(',')[0] in['名詞', '動詞']]sampletext = u"文章の中から、名詞、動詞原型などを抽出して、リストにするよ"print(extract_words(sampletext))sampletext = u"劉備と関羽と張飛の三人は桃園で義兄弟の契りを結んだ"print(extract_words(sampletext))sampletext = u"悪来典韋はかえって、許褚のために捉弄されたので烈火の如く憤った"print(extract_words(sampletext)) 実行結果['文章', '中', '名詞', '動詞', '原型', '抽出', 'する', 'リスト', 'する']['劉', '備', '関', '羽', '張', '飛', '三', '人', '桃園', '義兄弟', '契り', '結ぶ']['典', '韋', '許', '褚', 'ため', '捉弄', 'する', 'れる', '烈火', '憤る']

到此为止,现已形成了最简略的处理天然言语的环境!

武将辨认①——关羽

可是假如仔细看效果的话——诶!居然没有辨认到“关羽”!

本来关羽被拆分成了“关”和“羽”。和“结拜兄弟”等一般名词不同,“刘备”“关羽”“张飞”等三国中的武将姓名,按往常的办法是不会被辨认到的,但这也不是什么大问题。

在Janome中可以运用mecabo-ipadic-neologd的词典数据——由Janome的作者(@moco_beta)揭露的和mecaba-ipadic-neologd配套的产品。

拜访以下链接,将它复制到其自己的GoogleDrive中。

https://drive.google.com/drive/folders/0BynvpNc_r0kS黄衍仁d2NOLU01TG5MWnc

janome+neologdのインストール#結構時間がかかる(6分くらい)#Mydrive上の、先程のjanome+neologdのパスを指定する#最新版とファイル名が共同しているかどうかは各自で確認すること!pip install "drive/My Drive/Janome-0.3.9.neologd20190523.tar.gz" --no-compile

装置成功后,会呈现以下描绘,找到“RESTART RUNTIME”按钮。

インストール実行結果の结尾#WARNING: The following packages were previously imported in this runtime:# [janome]#You must restart the runtime in order to use newly installed versions.

假如要把Colaboratory的RUNTIME复位一次,按这个按钮就OK。

运用NEologd同捆版时,需求略微改动Tokenneizer开始的生成代码。经过下面的代码,让咱们来看看NEologd的作用吧!

NEologd入れた状態で形態素解析する# Janomeのロードfrom ja文学nome.tokenizer import Tokenizer# Tokenneizerインスタンスの生成 ★ここが異なる★tokenizer = Tokenizer(mmap=True)# テキストを引数として、形態素解析の結果、名詞・動詞原型のみを配列で抽出す半月板损害医治る関数def extract_words(text): tokens = tokenizer.tokenize(text) return [token.base_form for token in tokens if token.part_of_speech.split(',')[0] in['名詞', '動詞']] sampletext = u"劉備と関羽と張飛の三人は桃園で義兄弟の契りを結んだ"print(extract_words(sampletext))sampletext = u"悪来典韋はかえって、許褚のために捉弄されたので烈火の如く憤った"print(extract_words(sampletext))sampletext = u"田豊。沮授。許収。顔良。また――審配。郭図。文醜。などという錚々たる人材もあった。"print(extract_words(sampletext))sampletext = u"榜首鎮として後将軍南陽の太守袁術、字は公路を筆頭に、第二鎮、冀州の刺史韓馥、第三鎮、予州の刺史孔伷、第四鎮、兗州の刺史劉岱、第五鎮、河内郡の太守王匡、第六鎮、陳留の太守張邈、第七鎮、東郡の太守喬瑁"print(extract_words(sampletext))実行結果['劉備', '関羽', '張飛', '三', '人', '桃園', '義兄弟', '契り', '結ぶ']['悪来', '典韋', '許褚', 'ため', '捉弄', 'する', 'れる', '烈火', '憤る']['田豊', '沮授', '許', '収', '顔良', '審配', '郭図', '文醜', '錚々たる', '人材', 'ある']['鎮', '後将軍', '南陽', '太守', '袁術', '字', '公路', '筆頭', '二', '鎮', '冀州', '刺史', '韓', '馥', '三', '鎮', '予州', '刺史', '孔', '伷', '四',

刘备、关羽、张飞等自不必说,典韦、许褚、田丰、沮授等也可以辨认出来。别的,除了辨认这些有名武将之外,动词和一般名词的辨认精确度也进步了,所以整体上来说得出了抱负的效果。

可是假如仔细看这个效果的话……

武将辨认②——反董卓联盟三军覆没?

经过导入NEologd,“刘备”“关羽”等位置90以上的人,以及SSR里的人尽管可以认识到,可是在三国国际里还有许多不出名的人没能被辨认。十堰,本田奥德赛-2019星实力重磅来袭,文娱明星全知道

在此之前的效果中,叛徒的代名词——“许收”就没有被辨认到。一同,尽管喜爱投币式甘蔗蜜水的伪皇帝“袁术”被辨认到了,但韩馥、孔伷、刘岱、张邈、乔瑁等都没被辨认到。

这样就不能写出反董卓联盟的精彩华章了,连NEologd也没能掩盖到这儿!所以,咱们制造了“三国上台人物名单”,将其作为“用户辞典”注册到Janome中:

https://ja.wikipedia.org/wiki/三国演義の人物の一覧

以该网页的人物一览表为根底,简略地制造出每行一人的文本。将这个上传之后,测验着读出下列的代码。

人名リストの読み込み#人物の名前が列挙してあるテキストから、ワードリストを作成するimport codecsdef getKeyWordList(): input_file = codecs.open('drive/My Drive/Sangokusi/三国志_人名リスト.txt' , 'r', 'utf-8') lines = input_file.readlines() #読み込み result_list = [] for line in lines: tmp_line = line tmp_line = tmp_line.replace("\r","") tmp_line = tmp_line.replace("\n","") #ゴミデータ削除のため、2文字以上のデータを人名とみなす if len(tmp_line)>1: result_list.append(tmp_line) return result_listjinbutu_word_list = getKeyWordList()print(len(jinbutu_word_list))print(jinbutu_word_list[10:15])実行結果1178['張楊', '張虎', '張闓', '張燕', '張遼']

就这样,在录入1178位人物的称号后,得到了一个很简练的清单。别的,为了精雕细镂,做了如下调整:

  • 由于马忠同名同姓,所以抛弃了区别;
  • “乔瑁”在wiki上不存在所以之后追加;
  • “張繍”“張繡”奇妙的字体不同;
  • “回禄夫人”变更为“回禄”。

依据该列表,创建了在Janome中运用的“用户辞典办法”的CSV文件,尽管可以设定的当地还有许多,但由于此次仅仅单纯的人名列表,因而都以相同的注册内容进行。

Janomeのユーザ辞書csvの作成#作成したキーワードリストから、janomeのユーザ辞書办法となるCSVファイルを作成するkeyword_list = jinbutu_word_listuserdict_list = []#janomeのユーザ辞書办法に変換をかける。コストや品詞の設定等for keyword in keyword_list: #莫妮卡贝鲁奇「表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用型,活用形,原形,読み,発音」 #参阅:http://taku910.github.io/mecab/dic.html #コストは,その単語がどれだけ出現しやすいかを示しています. #小さいほど, 出現しやすいという意味になります. 似たような単語と 同じスコアを割り振り, その単位で切り出せない場合は, 徐々に小さくしていけばいい userdict_one_str = keyword + ",-1,-1,-5000,名詞,一般,*,*,*,*," + keyword + ",*,*" #固有名詞なので、かなりコストは低く(その単語で切れやすく)設定 userdict_one_list = userdict_one_str.split(',') userdict_list.append(userdict_one_list)print(userdict_li十堰,本田奥德赛-2019星实力重磅来袭,文娱明星全知道st[0:5])#作成したユーザ辞書办法をcsvでセーブしておくimport csvwith open("drive/My Drive/Sangokusi/三国志人名ユーザ辞書.csv", "w", encoding="utf8") as f: csvwriter = csv.writer(f, lineterminator="\n") #改行記号で行を区切る csvwriter.writerows(userdict_list)実行結果[['張譲', '-1', '-1', '-5000', '名詞', '一般', '*', '*', '*', '*', '張譲', '*', '*'], ['張角', '-1', '-1', '-5000', '名詞', '一般', '*', '*', '*', 这样,记载了1000位以上有名武将的用户词典就制造出来了!现在让咱们来查验一下这本词典的适用范围。 ユーザ辞書を使った場合# Janomeのロードfrom janome.tokenizer import Tokenizer#ユーザ辞書、NEologd 両方使う。★ここが変更点★tokenizer_with_userdict = Tokenizer("drive/My Drive/Sangokusi/三国志人名ユーザ辞書.csv", udic_enc='utf8', mmap=True)# テキストを引数として、形態素解析の結果、名詞・動詞原型のみを配列で抽出する関数def extract_words_with_userdict(text): tokens = tokenizer_with_userdict.tokenize(text) return [token.base_form for token in tokens #どの品詞を採用するかも重要な調整要素 if token.part_of_speech.split(',')[0] in['名詞', '動詞']]sampletext = u"劉備と関羽と張飛の三人は桃園で義兄弟の契りを結んだ"print(extract_words_with_userdict(sa范荩mpletext))sampletext = u"悪来典韋はかえって、許褚のために捉弄されたので烈火の如く憤った"print(extract_words_with_userdict(sampletext))sampletext = u"田豊。沮授。許収。顔良。また――審配。郭図。文醜。などという錚々たる人材もあった。"print(extract_words_with_userdict(sampletext))sampletext = u"榜首鎮として编绳手链後将軍南陽の太守袁術、字は公路を筆頭に、第二鎮、冀州の刺史韓馥、第三鎮、予州の刺史孔伷、第四鎮、十堰,本田奥德赛-2019星实力重磅来袭,文娱明星全知道兗州の刺史劉岱、第五鎮、河内郡の太守王匡、第六鎮、陳留の太守張邈、第七鎮、東郡の太守喬瑁"print(extract_words_with_userdict(sampletext))実行結果['劉備', '関羽', '張飛', 'の', '三', '人', '桃園', '義兄弟', '契り', '結ぶ']['悪来', '典韋', '許褚', 'ため', '捉弄', 'する', 'れる', '烈火', '憤る']['田豊', '沮授', '許', '収', '顔良', '審配', '郭図', '文醜', '錚々たる', '人材', 'ある']['鎮', '後将軍', '南陽', '太守', '袁術', '字', '公路', '筆頭', '二', '鎮', '冀州', '刺史', '韓馥', '三', '鎮', '予州', '刺史', '孔伷', '四', '鎮', '兗

“成功了!”

Tips:

在进行形状剖析时,首要考虑到的候选东西是mecab,但在mecab上进行环境构建十分费事。尽管在Colaboratory上有快捷的办法,可是它能和neologd一同运用么?可以自己增加用户词典么?考虑到这些,在Web上是无法构建一个良好环境的。

因而,就这一点来说Janome便成为首推,由于它可以下降构建环境的妨碍。这种对三国等共同国际定制的天然言语的处理办法也很简略上手。

乍一看这现已足够了,可是模糊能感觉到还存在妨碍?

下一个是堕入“孔明的骗局”的故事。在进入这个故事之前,发起AI剖析的曹操提到:“让我参与CM!”

CM乱入~

“赤壁之战”活动简介

日期:大约为公元208年11月20日

场所:赤壁(在春风吹起之前请各位豪杰各抒己见)

参与者:曹操、周瑜、诸葛亮等众嘉宾

孙权:“统筹部下的高着儿。”

黄盖陈楚生:“三代功臣被年青一代无情蹂躏的故事。”

诸葛亮:“让咱们看看我是怎样筹措10万只箭的。”

蔡瑁:“换岗后获得上司信任的办法。”

庞统:“教你学会不晕船的小窍门。”

曹操:“让部下尽忠职守的办理办法。”

其他:联欢会可以参与,是扩大和各大名将的人脉关系的好机遇!

(友谊提示:请不要出于反叛参与此次活动)

曹操:“赤壁之战再见!”

孔明等候的机遇快要到来了……

孔明的骗局——字的辨认

总算做好了,输入人名数据资料后就可以剖分出来相应的参数!不必再等候了,这便是孔明的骗局。

就这样解析的话得不到一个令人满意的效果,请看下面的比方:

“车上穿戴白衣戴着簪冠的人一定是诸葛亮孔明。”

“这是予州太守刘备的义弟关羽字云长。”

“赵子龙骑着白马,在马背上就把他刺死了。”

“赵云子龙在战役中疏于职守,玄德在两难中。”

孔明是字,诸葛亮才是本名。咱们一般都称他孔明,可是也有称他为诸葛亮或许诸葛孔明的时分。刘备字玄德,关羽字云长,赵云字子龙,文中也会呈现“玄德、关羽......”一类的称号。

与此相似,三国中同一个人物有不同的称号办法。可是一个人有四种称号办法让我很困扰:赵云=子龙=赵子龙=赵云子龙、刘备=玄德=刘玄德=刘备玄德。

这需求进行进一步替换:赵子龙⇒赵赵云、赵云子龙⇒赵云赵云,采纳这样的办法是为了避免重复现象发作。别的,用字称号的大多是有名的武将,所以这次咱们预备了130位武将的名单。运用这份名单,适度参阅下三国的粉丝网站,再将制造好字和全名的CSV录入,就可以先告一段落啦!

あざなCSVの読み込みimport csvcsv_file = open("drive/My Drive/Sangokusi/三国志_あざな変換リスト.csv", "r", encoding="utf8", error胡芯宇s="", newline="" )#リスト办法azana_reader = csv.reader(csv_file, delimiter=",", doublequ十堰,本田奥德赛-2019星实力重磅来袭,文娱明星全知道ote=True, lineterminator="\r\n", quotechar='"', skipinitialspace=True)azana_list = [ e for e in azana_reader ]csv_file.close()print(len(azana_list))print(azana_list[2])#全員の字リストを作るのは難しかったが、#['雲長', '関羽']のような132人の代表的な字とその対比表が入っている実行結果132['雲長', '関羽']

经过这种办法运用生成的对照表,然后对文本里边的“字”做转化处理。

字(あざな)の変換処理の実装#これは、字(あざな)を置き換えるだけの単純な置換処理def azana_henkan(input_text): result_text = input_text for azana_pair in azana_list: result_text = result_text.replace(azana_pair[0],azana_pair[1]) return result_text#単純に、字からの変換をかけるだけだと、#趙雲子龍→趙雲趙雲などのようになる場合が多いため、#同一の人物名で重複している場合は、一方を削除する。#また、劉玄徳、趙子龍、などのような表現に対応するため、#フルネームで2文字の場合はAAB→AB(劉玄徳→劉劉備→劉備)#フルネームで3文字の場合はAAB→AB(諸葛孔明→諸葛諸葛亮→諸葛亮)# となる名寄せを行う。#(※姓名1文字+名前二文字はあまり居ない気がするので無視)def jinmei_tyouhuku_sakujyo(input_text): jinbutu_word_list = getKeyWordList() result_text = input_text for jinbutum逐字五笔怎样打ei in jinbutu_word_list: result_text = result_text.replace(jinbutumei+jinbutumei, jinbutumei) if len(jinbutumei) == 2: result_text = result_text.replace(jinbutumei[0]+十堰,本田奥德赛-2019星实力重磅来袭,文娱明星全知道jinbutumei, jinbutumei) if len(jinbutumei) == 3: result_text = result_text.replace(jinbutumei[0]+jinbutumei[1]+jinbutumei, jinbutumei) return result_textsampletext = u"これは予州の太守劉玄徳が義弟の関羽字は雲長なり"print(jinmei_tyouhuku_sakujyo(azana_henkan(sampletext)))sampletext = u"趙子龍は、白馬を飛ばして、馬上から一気に彼を槍で突き殺した。"print(jinmei_tyouhuku_sakujyo(azana_henkan(sampletext)))sampletext = u"趙雲子龍も、やがては、戦いつかれ、玄徳も進退きわまって、すでに自刃を覚悟した時だった。"print(jinmei_tyouhuku_sakujyo(azana_henkan(sampletext)))実行結果これは予州の太守劉備が義弟の関羽字は関羽なり趙雲は、白馬を飛ばして、馬上から一気に彼を槍で突き殺した。趙雲も、やがては、戦いつかれ、劉備も進退きわまって、すでに自刃を覚悟した時だった。

总算,三国里边的固有名词和对应“孔明的骗局”的词都处理好了。

到了三国一致的终究时间,在霸占汉中之前,让咱们再做终究一步处理!

判处“鸡肋”死刑——消去中止词

曹操:“鸡肋、鸡肋......”

杨修:“ok!处理了!”

“云长不幸他,就给他上了一壶他喜爱的酒。”这儿的“他”天然便是张飞。除掉“他”进行剖析,就会出来“曹操≒他”这样的剖析效果(单纯的便是由于曹操的进场次数比较多)。一个看似有意义的“他”,在实践的剖析中只会是搅扰,因而,就把“他”像杨修操作的相同直接判处死刑。

曹操:“怎样这么固执的就把它除掉还判处死刑呢?”

假如你想一览像“鸡肋”相同的中止词的话,SlothLib是咱们常常运用的网站。

可是在其他场景里边。这个“他”可能是曹操或许刘备。这儿记载的中止词都被判处死刑(消去)并处理成了代码。

首要,登录SlothLib将这些数据制造成一个列表。

SlothLibからのデータの获得&リスト化#雑音になりやすい単語(「彼」など)はストップワードとして在外する#SlothLibのテキストを使う。#どんな言葉黑执事第三季が在外されるのかは、直接URLを見れば良い#参阅: http://testpy.hatenabl初中女生视频og.com/entry/2016/10/05/004949import urllibslothlib_path = 'http://svn.sourceforge.jp/svnroot/slothlib/CSharp/Version1/SlothLib/NLP/Filter/Stop王俊凯小说Word/word/Japanese.txt'#slothlib_file = urllib2.urlopen(slothlib_path) #←これはPython2のコードslothlib_file = urllib.request.urlopen(slothlib_path)slothlib_stopwords = [line.decode("utf-8").strip() for line in slothlib_file]slothlib_stopwords = [ss for ss in slothlib_stopwords if not ss==u'']#['彼','彼女',・・・]のようなリストになるprint(len(slothlib_stopwords))print(slothlib_stopwords[10:15])実行結果310['いま', 'いや', 'いろいろ', 'うち', 'おおまか']

得到310个“鸡肋”停用词,选用如上制造的清单提取出名词动词后,再除掉“鸡肋清单”中的停用词。

鶏肋ワードの除掉機能を実装するsampletext = u"彼は予州の太守劉玄徳が義弟の関羽字は雲長。彼は劉備玄徳の義兄弟だ"tmp_word_list = extract_words_with_userdict(jinmei_tyouhuku_sakujyo(azana_henkan(sampletext)))print(tmp_word_list)#このようにして、単語リストからストップワードを在外するtmp_word_list = [word for word in tmp_word_list if word not in slothlib_stopwords]print(tmp_word_list)実行結果['彼', '予州', '太守', '劉備', '義弟',幼年吉他谱 '関羽', '字', '関羽', 'なり', '彼', '劉備', 'の', '義兄弟']['予州', '太守', '劉備', '義弟', '関羽', '関羽', 'なり', '劉備', 'の', '義兄弟']

比较两次处理的效果,咱们就可以看到“他”这个停用词现已消失了。

那么,一切的预备都做好了!

终究,让咱们把效果应用到吉川英治的全文中。

闪亮上台——全文的形状剖析

首要在青空文库网站上下载翻译版吉川英治的《三国》全文,制造结合了悉数章节的文本。这儿需求特别注意的是像下列相同青空文库特有的符号:

需求把公孫※[#「王+贊」、第3水準1-88-37]《こうそんさん》⇒「公孫瓚」。

尽管我之前就运用独立代码,可是感觉还有更好的办法,所以就编写了一万行如下的转化代码。

self.resulttext=re.sub(r'※[#.*?1-88-37.*?]',"瓚",self.resulttext)

首要,制造“字”的人名册。

全文テキストに対して、字(あざな)変換処理をかけるimport codecsdef azana_henkan_from_file(input_file_path): input_file = codecs.open(input_file_path, 'r', 'utf-8') lines = input_file.readlines() #読み込み result_txt = "" for line in lines: result_txt += line result_txt = azan朱佳煜a_henkan(result_txt) return result_txt#ファイル生成用関数定義#mesのテキストを、filepathに、utf-8で書き込むdef printFile(mes,filepath): file_utf = codecs.open(filepath, 'w', 'utf-8') file_utf.write(mes) file_utf.close() return "OK"azana_henkango_zenbun = azana_henkan_from_file('drive/My Drive/Sangokusi/三国志全文.txt')azana_henkango_zenbun = jinmei_tyouhuku_sakujyo(azana_henkango_zenbun)printFile(azana_henkango_zenbun,'drive/My Drive/Sangokusi/三国志全文_あざな変換済み.txt')

运用搭载了NEologd和用户词典的Janome对完成了“字”转化的文本进行形状剖析,运用pickle把处理好的数据保存到GoogleDrive上,便利日后运用。

全文の形態素解析%%time#全文分化するのに10分ほどかかるimport codecs# ['趙雲', '白馬', '飛ばす', '馬上', '彼', '槍', '突き', '殺す'] このようなリストのリスト(二次元リスト)になるdef textfile2wordlist(input_file_path): input_file = codecs.open(input_file_path, 'r', 'utf-8') lines = input_file.readlines() #読み込み result_word_list_list = [] for line in lines: # 1行ずつ形態素解析によってリスト化し、結果格納用のリストに格納していく # Word2Vecでは、分かち書きされたリスト=1文ずつ、のリストを引数にしている tmp_word_list = extract_words_with_userdict(line) #別途準備しておいたstopワードリストを使って在外処理を行う tmp_word_list = [word for word in tmp_word_list if word not in slothlib_stopwords] result_word_list_list.append(tmp_word_list) return result_word_list_listWord_list_Sangokusi_AzanaOK_with_userdict_neologd = textfile2wordlist('drive/My Drive/Sangokusi/三国志全文_あざな変換済み.txt')#作成したワードリスト电脑怎样设置暗码は、pickleを使って、GoogleDriveに保存しておく(一回10分くらいかかるからね)import picklewith open('drive/My Drive/Sangokusi/Word_list_Sangokusi_AzanaOK_with_userdict_neologd_V4.pickle', 'wb') as f: pickle.dump(Word_list_Sangokusi_AzanaOK_with_userdict_neologd, f)#保存したpickleファイルは、以下のように復元するwith open('drive/My Drive/Sangokusi/Word_list_Sangokusi_AzanaOK_with_userdict_neologd_V4.pickle', 'rb') as f: Word_list_Sangokusi_AzanaOK_with_userdict_neologd = pick仙界迷踪le.load(f)print(len(Word_list_Sangokusi_AzanaOK_with_userdict_neologd))print(Word_list_Sangokusi_AzanaOK_with_userdict_neologd[10:20])

到此为止,总算完成了对吉川英治《三国》全文的剖析,在可以正确辨认武将称号并制造了名册的根底上还完成了名词和动词的转化!

天然言语处理篇——结束

朋友们:“写这么长的报导,哈哈哈哈,诸葛亮都没有这么持久!”

的确有点冗长了,为了做一个好的区别,也为了读者们的健康考虑,这次就介绍到这儿。

下一次的方案便是把制造好的清单和抽选出来的武将称号进行机器学习处理,这篇文章也仅仅仅仅想写写“孔明的骗局”。

为了把三国的国际进行机器学习处理,这次进行的处理是进步终究效果的精确度的要害。(有没有一种关羽千里走单骑,逐关击破的感觉?)

别的,Colaboratory + Janome + NEologd + 用户词典的配套运用办法假如能给进行天然言语处理的人供给新视角的话就再好不过了!毕竟在Web上面进行酒店办理NEologd+用户词典的操作尽管简略,可是不管做多全面的查询也不能得到上述相同完好的阐明。

欢迎咱们积极测验!

彩蛋~

终究,猎奇的文摘菌还去扒了一下作者的布景,发现这位日本小哥哥一向热衷于用机器学习处理一些有意思的问题,比方,此前他就由于运用AI对日本年号进行剖析猜测接受了富士电视台的专访。

这儿也简略介绍一下小哥哥(@youwht)的日本年号项目。

在Windows10 + Python3 +JupyterNotebook的条件之下,先运用条件(维基百科的文本信息、已运用的年号作为学习目标、小学水平的汉字易懂程度等)挑选到10061006的汉字组合,得到了包含“仁九”在内的备选年号,随后对被AI挑选的替补年号进行再评判,从523个中挑选出了17个,再将这17个中的评判值TOP4参与终究候选。惋惜的是,小哥哥并没有发布完好猜测。

不过后来在对已发布的新年号“令和”剖析中发现,不管是单个字的评判值仍是两个字的“距离感”,从构成法的视点上看,“令和”与“平成”十分相似(后者乃至到达0.3的标准偏差)。超熟是不是很厉害!

the end
2019星势力重磅来袭,娱乐明星全知道