Main project for now.


In [172]:
import numpy as np
import sklearn
import matplotlib.pyplot as plt
import seaborn as sns;sns.set()
from sklearn.feature_extraction.text import TfidfVectorizer
file = open('十万个为什么raw.txt', 'r')
answers = []
answer = []
questions = []
flag = 0
for line in file.readlines()[1:]:
    if flag == 1:
        flag = 0
    elif line.startswith('<h2>'):
        questions.append(line)
        if answer:
            answers.append(answer)
        answer = []
    elif len(line) == 1:
        flag = 1
    else:
        answer.append(line)
answers.append(answer)
answers = [''.join(ans) for ans in answers]
import jieba
# questions = [' '.join(jieba.cut(question)) for question in questions]
# answers = [' '.join(jieba.cut(answer)) for answer in answers]
chinese_stopwords = '按,按照,俺,俺们,阿,别,别人,别处,别是,别的,别管,别说,不,不仅,不但,不光,不单,不只,不外乎,不如,不妨,不尽,不尽然,不得,不怕,不惟,不成,不拘,不料,不是,不比,不然,不特,不独,不管,不至于,不若,不论,不过,不问,比方,比如,比及,比,本身,本着,本地,本人,本,巴巴,巴,并,并且,非彼,彼时,彼此,便于,把,边,鄙人,罢了,被,般的,此间,此次,此时,此外,此处,此地,此,才,才能,朝,朝着,从,从此,从而,除非,除此之外,除开,除外,除了,除,诚然,诚如,出来,出于,曾,趁着,趁,处在,乘,冲,等等,等到,等,第,当着,当然,当地,当,多,多么,多少,对,对于,对待,对方,对比,得,得了,打,打从,的,的确,的话,但,但凡,但是,大家,大,地,待,都,到,叮咚,而言,而是,而已,而外,而后,而况,而且,而,尔尔,尔后,尔,二来,非独,非特,非徒,非但,否则,反过来说,反过来,反而,反之,分别,凡是,凡,个,个别,固然,故,故此,故而,果然,果真,各,各个,各位,各种,各自,关于具体地说,归齐,归,根据,管,赶,跟,过,该,给,光是,或者,或曰,或是,或则,或,何,何以,何况,何处,何时,还要,还有,还是,还,后者,很,换言之,换句话说,好,后,和,即,即令,即使,即便,即如,即或,即若,继而,继后,继之,既然,既是,既往,既,尽管如此,尽管,尽,就要,就算,就是说,就是了,就是,就,据,据此,接着,经,经过,结果,及,及其,及至,加以,加之,例如,介于,几时,几,截至,极了,简言之,竟而,紧接着,距,较之,较,进而,鉴于,基于,具体说来,兼之,借傥然,今,叫,将,可,可以,可是,可见,开始,开外,况且,靠,看,来说,来自,来着,来,两者,临,类如,论,赖以,连,连同,离,莫若,莫如,莫不然,假使,假如,假若,某,某个,某些,某某,漫说,没奈何,每当,每,慢说,冒,哪个,哪些,哪儿,哪天,哪年,哪怕,哪样,哪边,哪里,那里,那边,那般,那样,那时,那儿,那会儿,那些,那么样,那么些,那么,那个,那,乃,乃至,乃至于,宁肯,宁愿,宁可,宁,能,能否,你,你们,您,拿,难道说,内,哪,凭借,凭,旁人,譬如,譬喻,且,且不说,且说,其,其一,其中,其二,其他,其余,其它,其次,前后,前此,前者,起见,起,全部,全体,恰恰相反,岂但,却,去,若非,若果,若是,若夫,若,另,另一方面,另外,另悉,如若,如此,如果,如是,如同,如其,如何,如下,如上所述,如上,如,然则,然后,然而,任,任何,任凭,仍,仍旧,人家,人们,人,让,甚至于,甚至,甚而,甚或,甚么,甚且,什么,什么样,上,上下,虽说,虽然,虽则,虽,孰知,孰料,始而,所,所以,所在,所幸,所有,是,是以,是的,设使,设或,设若,谁,谁人,谁料,谁知,随着,随时,随后,随,顺着,顺,受到,使得,使,似的,尚且,庶几,庶乎,时候,省得,说来,首先,倘,倘使,倘或,倘然,倘若,同,同时,他,他人,他们们,她们,她,它们,它,替代,替,通过,腾,这里,这边,这般,这次,这样,这时,这就是说,这儿,这会儿,这些,这么点儿,这么样,这么些,这么,这个,这一来,这,正是,正巧,正如,正值,万一,为,为了,为什么,为何,为止,为此,为着,无论,无宁,无,我们,我,往,望,惟其,唯有,下,向着,向使,向,先不先,相对而言,许多,像,小,些,一,一些,一何,一切,一则,一方面,一旦,一来,一样,一般,一转眼,,由此可见,由此,由是,由于,由,用来,因而,因着,因此,因了,因为,因,要是,要么,要不然,要不是,要不,要,与,与其,与其说,与否,与此同时,以,以上,以为,以便,以免,以及,以故,以期,以来,以至,以至于,以致,己,已,已矣,有,有些,有关,有及,有时,有的,沿,沿着,于,于是,于是乎,云云,云尔,依照,依据,依,余外,也罢,也好,也,又及,又,抑或,犹自,犹且,用,越是,只当,只怕,只是,只有,只消,只要,只限,再,再其次,再则,再有,再者,再者说,再说,自身,自打,自己,自家,自后,自各儿,自从,自个儿,自,怎样,怎奈,怎么样,怎么办,怎么,怎,至若,至今,至于,至,纵然,纵使,纵令,纵,之,之一,之所以,之类,着呢,着,眨眼,总而言之,总的说来,总的来说,总的来看,总之,在于,在下,在,诸,诸位,诸如,咱们,咱,作为,只,最,照着,照,直到,综上所述,贼死,逐步,遵照,遵循,针对,致,者,则甚,则,咳,哇,哈,哈哈,哉,哎,哎呀,哎哟,哗,哟,哦,哩,矣哉,矣乎,矣,焉,毋宁,欤,嘿嘿,嘿,嘻,嘛,嘘,嘎登,嘎,嗳,嗯,嗬,嗡嗡,嗡,喽,喔唷,喏,喂,啷当,啪达,啦,啥,啐,啊,唉,哼唷,哼,咧,咦,咚,咋,呼哧,呸,呵呵,呵,呢,呜呼,呜,呗,呕,呃,呀,吱,吧哒,吧,吗,吓,兮,儿,亦,了,乎'
chinese_stopwords = chinese_stopwords.split(',')
# vocab = set((' '.join([answer for answer in answers] + [question for question in questions])).split())
vectorizer = TfidfVectorizer(ngram_range=(1,2), stop_words=chinese_stopwords, analyzer='char')
train_corpus = questions + answers
train_corpus = [i.replace('\n','') for i in train_corpus]
vectorizer.fit(train_corpus)
questions_vec = vectorizer.transform(questions)
answers_vec = vectorizer.transform(answers)

In [173]:
from sklearn.neighbors import KNeighborsClassifier
X = answers_vec
y = np.linspace(0, X.shape[0]-1, X.shape[0], dtype=np.int32)
model = KNeighborsClassifier(n_neighbors=1)
model.fit(X, y)
Xtest = questions_vec
ytest = y
model.score(Xtest, ytest)


Out[173]:
0.90645586297760206

In [174]:
from sklearn.decomposition import TruncatedSVD
pca = TruncatedSVD(n_components=2, n_iter=30)
pca.fit(X + Xtest)
Xp = pca.transform(X)
Xtestp = pca.transform(Xtest)
plt.scatter(Xp[:,0], Xp[:,1], color='red', s=3, alpha=0.5)
plt.scatter(Xtestp[:,0], Xtestp[:,1], color='blue',s=3, alpha=0.5)
plt.show()



In [175]:
file = open('xx.txt', 'w')
file.write('\n'.join(vectorizer.get_feature_names()))
file.close()

In [176]:
vectorizer.get_feature_names()


Out[176]:
[' ',
 ' 0',
 ' 1',
 ' 2',
 ' 3',
 ' 4',
 ' 5',
 ' 6',
 ' 7',
 ' 8',
 ' 9',
 ' r',
 ' t',
 '#',
 '#1',
 '#<',
 '#e',
 '#p',
 '#不',
 '#两',
 '#中',
 '#为',
 '#也',
 '#习',
 '#从',
 '#他',
 '#伽',
 '#但',
 '#公',
 '#关',
 '#农',
 '#分',
 '#到',
 '#前',
 '#危',
 '#厄',
 '#原',
 '#叉',
 '#可',
 '#台',
 '#叶',
 '#后',
 '#哈',
 '#回',
 '#因',
 '#国',
 '#声',
 '#多',
 '#天',
 '#太',
 '#如',
 '#姑',
 '#孟',
 '#宋',
 '#屋',
 '#巴',
 '#当',
 '#忽',
 '#总',
 '#成',
 '#我',
 '#或',
 '#所',
 '#打',
 '#抹',
 '#按',
 '#改',
 '#断',
 '#施',
 '#昆',
 '#明',
 '#春',
 '#更',
 '#最',
 '#月',
 '#有',
 '#桃',
 '#正',
 '#每',
 '#毛',
 '#气',
 '#水',
 '#汉',
 '#没',
 '#法',
 '#海',
 '#温',
 '#热',
 '#牛',
 '#用',
 '#由',
 '#目',
 '#相',
 '#看',
 '#睡',
 '#第',
 '#经',
 '#结',
 '#给',
 '#绿',
 '#英',
 '#蒙',
 '#虽',
 '#蜂',
 '#血',
 '#要',
 '#走',
 '#轰',
 '#近',
 '#还',
 '#这',
 '#那',
 '#钻',
 '#除',
 '#随',
 '#雨',
 '#雪',
 '#食',
 '#马',
 '%',
 '%。',
 '%主',
 '%之',
 '%以',
 '%光',
 '%发',
 '%可',
 '%含',
 '%存',
 '%左',
 '%得',
 '%时',
 '%的',
 '%经',
 '%至',
 '%都',
 '%食',
 '%,',
 '%;',
 '%~',
 '&',
 '&t',
 '-',
 '-1',
 '-2',
 '-3',
 '-4',
 '-5',
 '-6',
 '-8',
 '-9',
 '-氨',
 '.',
 '.0',
 '.1',
 '.2',
 '.3',
 '.4',
 '.5',
 '.6',
 '.7',
 '.8',
 '.9',
 '/',
 '/1',
 '/3',
 '/4',
 '/5',
 '/7',
 '/8',
 '/h',
 '/分',
 '/千',
 '/升',
 '/厘',
 '/小',
 '/时',
 '/秒',
 '0',
 '0 ',
 '0%',
 '0-',
 '0.',
 '00',
 '01',
 '02',
 '03',
 '04',
 '05',
 '06',
 '07',
 '08',
 '09',
 '0°',
 '0×',
 '0”',
 '0‰',
 '0、',
 '0。',
 '0万',
 '0下',
 '0世',
 '0两',
 '0个',
 '0人',
 '0亿',
 '0代',
 '0余',
 '0倍',
 '0元',
 '0兆',
 '0光',
 '0克',
 '0军',
 '0分',
 '0千',
 '0卷',
 '0厘',
 '0只',
 '0名',
 '0吨',
 '0周',
 '0国',
 '0圈',
 '0块',
 '0埃',
 '0增',
 '0多',
 '0天',
 '0安',
 '0小',
 '0层',
 '0岁',
 '0平',
 '0年',
 '0度',
 '0开',
 '0张',
 '0所',
 '0摄',
 '0支',
 '0日',
 '0月',
 '0架',
 '0次',
 '0毫',
 '0点',
 '0焦',
 '0牛',
 '0瓦',
 '0的',
 '0种',
 '0秒',
 '0立',
 '0箱',
 '0米',
 '0艘',
 '0节',
 '0英',
 '0赫',
 '0转',
 '0辆',
 '0部',
 '0门',
 '0页',
 '0顿',
 '0颗',
 '0,',
 '0~',
 '1',
 '1 ',
 '1%',
 '1.',
 '1/',
 '10',
 '11',
 '12',
 '13',
 '14',
 '15',
 '16',
 '17',
 '18',
 '19',
 '1×',
 '1、',
 '1万',
 '1世',
 '1个',
 '1亩',
 '1仗',
 '1便',
 '1倍',
 '1克',
 '1公',
 '1分',
 '1千',
 '1厘',
 '1号',
 '1名',
 '1和',
 '1固',
 '1国',
 '1天',
 '1寸',
 '1届',
 '1岁',
 '1平',
 '1年',
 '1度',
 '1摄',
 '1日',
 '1月',
 '1条',
 '1根',
 '1棵',
 '1次',
 '1母',
 '1毫',
 '1牛',
 '1甲',
 '1盏',
 '1碘',
 '1秒',
 '1米',
 '1纳',
 '1英',
 '1负',
 '1赛',
 '1)',
 '1,',
 '1~',
 '2',
 '2 ',
 '2%',
 '2.',
 '2/',
 '20',
 '21',
 '22',
 '23',
 '24',
 '25',
 '26',
 '27',
 '28',
 '29',
 '2>',
 '2a',
 '2v',
 '2×',
 '2”',
 '2′',
 '2、',
 '2万',
 '2丈',
 '2世',
 '2个',
 '2人',
 '2亿',
 '2伏',
 '2倍',
 '2克',
 '2分',
 '2千',
 '2厘',
 '2号',
 '2各',
 '2名',
 '2吨',
 '2块',
 '2天',
 '2对',
 '2小',
 '2层',
 '2届',
 '2岁',
 '2年',
 '2度',
 '2或',
 '2摄',
 '2日',
 '2时',
 '2月',
 '2条',
 '2根',
 '2毫',
 '2点',
 '2种',
 '2米',
 '2级',
 '2轰',
 '2部',
 '2颗',
 '2飞',
 '2马',
 '2)',
 '2,',
 '2~',
 '3',
 '3 ',
 '3%',
 '3.',
 '3/',
 '30',
 '31',
 '32',
 '33',
 '34',
 '35',
 '36',
 '37',
 '38',
 '39',
 '3×',
 '3、',
 '3。',
 '3万',
 '3世',
 '3两',
 '3个',
 '3亿',
 '3位',
 '3倍',
 '3候',
 '3克',
 '3公',
 '3军',
 '3分',
 '3千',
 '3卷',
 '3厘',
 '3只',
 '3号',
 '3周',
 '3大',
 '3天',
 '3对',
 '3封',
 '3小',
 '3尺',
 '3届',
 '3岁',
 '3年',
 '3排',
 '3摄',
 '3日',
 '3时',
 '3月',
 '3条',
 '3枚',
 '3架',
 '3根',
 '3次',
 '3毫',
 '3滑',
 '3点',
 '3由',
 '3男',
 '3的',
 '3种',
 '3米',
 '3类',
 '3组',
 '3艘',
 '3被',
 '3转',
 '3通',
 '3部',
 '3)',
 '3,',
 '3;',
 '3~',
 '4',
 '4 ',
 '4%',
 '4-',
 '4.',
 '4/',
 '40',
 '41',
 '42',
 '43',
 '44',
 '45',
 '46',
 '47',
 '48',
 '49',
 '4×',
 '4′',
 '4、',
 '4。',
 '4万',
 '4个',
 '4人',
 '4亿',
 '4位',
 '4倍',
 '4克',
 '4千',
 '4厘',
 '4名',
 '4国',
 '4块',
 '4小',
 '4岁',
 '4年',
 '4式',
 '4排',
 '4摄',
 '4日',
 '4月',
 '4格',
 '4次',
 '4毫',
 '4的',
 '4盎',
 '4种',
 '4米',
 '4至',
 '4艘',
 '4转',
 '4部',
 '4项',
 '4颗',
 '4,',
 '4~',
 '5',
 '5 ',
 '5%',
 '5.',
 '5/',
 '50',
 '51',
 '52',
 '53',
 '54',
 '55',
 '56',
 '57',
 '58',
 '59',
 '5°',
 '5×',
 '5‰',
 '5万',
 '5世',
 '5个',
 '5亩',
 '5人',
 '5亿',
 '5以',
 '5位',
 '5倍',
 '5克',
 '5分',
 '5千',
 '5厘',
 '5口',
 '5只',
 '5号',
 '5吨',
 '5天',
 '5尊',
 '5小',
 '5尺',
 '5层',
 '5届',
 '5岁',
 '5年',
 '5度',
 '5微',
 '5摄',
 '5日',
 '5月',
 '5次',
 '5毫',
 '5牛',
 '5甲',
 '5种',
 '5秒',
 '5米',
 '5节',
 '5转',
 '5辆',
 '5铀',
 '5:',
 '5~',
 '6',
 '6 ',
 '6%',
 '6.',
 '60',
 '61',
 '62',
 '63',
 '64',
 '65',
 '66',
 '67',
 '68',
 '69',
 '6v',
 '6×',
 '6′',
 '6万',
 '6上',
 '6世',
 '6个',
 '6人',
 '6亿',
 '6伏',
 '6倍',
 '6克',
 '6副',
 '6匹',
 '6千',
 '6厘',
 '6块',
 '6天',
 '6家',
 '6寸',
 '6小',
 '6层',
 '6届',
 '6岁',
 '6左',
 '6年',
 '6座',
 '6把',
 '6摄',
 '6日',
 '6时',
 '6月',
 '6次',
 '6毫',
 '6焦',
 '6的',
 '6种',
 '6秒',
 '6等',
 '6米',
 '6胜',
 '6艘',
 '6这',
 '6部',
 '6项',
 '6,',
 '6~',
 '7',
 '7 ',
 '7%',
 '7.',
 '70',
 '71',
 '72',
 '73',
 '74',
 '75',
 '76',
 '77',
 '78',
 '79',
 '7×',
 '7万',
 '7世',
 '7个',
 '7人',
 '7亿',
 '7位',
 '7克',
 '7公',
 '7千',
 '7厘',
 '7吨',
 '7和',
 '7场',
 '7天',
 '7女',
 '7岁',
 '7年',
 '7战',
 '7摄',
 '7日',
 '7时',
 '7月',
 '7次',
 '7种',
 '7秒',
 '7米',
 '7赫',
 '7铯',
 '7项',
 '7颗',
 '7~',
 '8',
 '8 ',
 '8%',
 '8.',
 '80',
 '81',
 '82',
 '83',
 '84',
 '85',
 '86',
 '87',
 '88',
 '89',
 '8×',
 '8…',
 '8′',
 '8、',
 '8。',
 '8万',
 '8世',
 '8个',
 '8人',
 '8亿',
 '8以',
 '8克',
 '8千',
 '8厘',
 '8只',
 '8可',
 '8号',
 '8名',
 '8天',
 '8小',
 '8岁',
 '8年',
 '8微',
 '8摄',
 '8日',
 '8时',
 '8月',
 '8条',
 '8根',
 '8次',
 '8毫',
 '8的',
 '8种',
 '8米',
 '8级',
 '8耳',
 '8辆',
 '8道',
 '8集',
 '8颗',
 '8,',
 '8~',
 '9',
 '9%',
 '9.',
 '90',
 '91',
 '92',
 '93',
 '94',
 '95',
 '96',
 '97',
 '98',
 '99',
 '9°',
 '9、',
 '9万',
 '9世',
 '9个',
 '9人',
 '9倍',
 '9候',
 '9克',
 '9分',
 '9千',
 '9名',
 '9天',
 '9对',
 '9届',
 '9岁',
 '9平',
 '9年',
 '9度',
 '9摄',
 '9日',
 '9月',
 '9条',
 '9根',
 '9次',
 '9点',
 '9秒',
 '9米',
 '9辆',
 '9~',
 '<',
 '</',
 '<h',
 '>',
 '>2',
 '>c',
 '>f',
 '>x',
 '>“',
 '>一',
 '>不',
 '>世',
 '>东',
 '>为',
 '>乒',
 '>乔',
 '>二',
 '>云',
 '>亚',
 '>人',
 '>伊',
 '>伽',
 '>体',
 '>俄',
 '>保',
 '>候',
 '>傈',
 '>傣',
 '>光',
 '>兔',
 '>冰',
 '>凡',
 '>凯',
 '>列',
 '>刘',
 '>动',
 '>努',
 '>包',
 '>十',
 '>印',
 '>反',
 '>发',
 '>受',
 '>古',
 '>台',
 '>司',
 '>吃',
 '>同',
 '>含',
 '>哺',
 '>唐',
 '>商',
 '>回',
 '>土',
 '>圣',
 '>在',
 '>地',
 '>坦',
 '>培',
 '>基',
 '>墨',
 '>壮',
 '>声',
 '>夏',
 '>大',
 '>天',
 '>太',
 '>头',
 '>夹',
 '>奥',
 '>姜',
 '>孔',
 '>孙',
 '>孟',
 '>宇',
 '>宋',
 '>寄',
 '>小',
 '>尖',
 '>尧',
 '>屋',
 '>山',
 '>巴',
 '>康',
 '>张',
 '>彗',
 '>彝',
 '>恒',
 '>惠',
 '>我',
 '>战',
 '>戚',
 '>扁',
 '>扔',
 '>护',
 '>摩',
 '>放',
 '>数',
 '>斯',
 '>日',
 '>星',
 '>普',
 '>曹',
 '>月',
 '>有',
 '>朱',
 '>李',
 '>杜',
 '>林',
 '>果',
 '>树',
 '>栾',
 '>桥',
 '>植',
 '>次',
 '>正',
 '>武',
 '>氏',
 '>气',
 '>水',
 '>汉',
 '>沙',
 '>河',
 '>法',
 '>洪',
 '>海',
 '>消',
 '>清',
 '>潜',
 '>激',
 '>火',
 '>燃',
 '>牙',
 '>牛',
 '>物',
 '>牵',
 '>狗',
 '>狼',
 '>猫',
 '>玄',
 '>玉',
 '>王',
 '>玻',
 '>珍',
 '>班',
 '>瑶',
 '>用',
 '>电',
 '>登',
 '>白',
 '>盘',
 '>直',
 '>相',
 '>眼',
 '>磁',
 '>端',
 '>绵',
 '>美',
 '>耳',
 '>聂',
 '>肖',
 '>肥',
 '>脉',
 '>自',
 '>舌',
 '>航',
 '>船',
 '>花',
 '>苗',
 '>英',
 '>荆',
 '>莱',
 '>薄',
 '>藏',
 '>蚂',
 '>蜂',
 '>蜜',
 '>蜻',
 '>血',
 '>记',
 '>诸',
 '>贝',
 '>走',
 '>赵',
 '>起',
 '>身',
 '>车',
 '>轰',
 '>辣',
 '>达',
 '>迫',
 '>遥',
 '>邓',
 '>郑',
 '>酒',
 '>醋',
 '>针',
 '>闪',
 '>防',
 '>雄',
 '>集',
 '>雷',
 '>霓',
 '>非',
 '>音',
 ...]

In [ ]: