互动媒体技术——对十二个“一”的文艺创作作业进行文本分析、统计和可视化

小组成员:
1.1191170412 陈颖
2.1191170413 黄洁
概要
一、文艺创作作业的相关介绍
二、文本分析方法介绍
三、snowNLP库介绍
四、gensim库介绍
五、处理代码展示
六、统计数据及其相关数据的分析说明
详细步骤
一、文艺创作作业的相关介绍

在这里插入图片描述
该研究的主体是同学们对对十二个“一”的文艺创作作业。该文创创作作业的内容如下:
将十二个”一“设想为人物角色/或事物,从下列任务中选择一个完成:
1.假想一个故事背景,从十二个”一“中挑选至少4人,为其设计角色形象,并配合文字描述该角色;
2.写一篇小说,类型主题字数不限,要求出现至少5个人物;
3.假设您是一个公司/机构的老总,要从十二个人中选拔人才,请描述如何选拔,选拔的理由,要求描述每个人的特质及其与您的公司的关系;
4.想象它们是十二个异性追求者,请描述一下您对它们的感受,字数不限;
5.想象它们是某个团体的成员,请描述每一位成员的特色,及其与其他成员和整个团队的关系;
6.假想一个游戏,它们是游戏中的十二个角色,请为它们进行角色设定(图文结合);
7.想象它们是十二个同类事物(例如乐器、兵器、交通工具、宠物、猛兽、妖怪、植物等),描述每一个的特色;
8.用编程或其他手段斟酌一组动画,表达十二个“一”体现的意像(运动感、质感、物理属性、情绪等),至少表现其中4个。

二、文本分析介绍

而每个同学都是从不同的角度对这些十二个一进行相关的描述,有的同学采用写小说的形式,有的把它们想象成了十二个角色,有的使用编程的形式进行展示……那么如何将这些数据总综合起来进行统一分析?
我们首先得明确我们得任务:运用NLP技术(自然语言处理)对其进行分析,完成一篇图文结合的分析报告,特别是要分别对十二个“一”有关的文本分别进行统计。所以我们得提取出有关十二个“一”的相关描述内容。而有些同学的文章是可以直接用该库进行处理的,有些的则不能。评价的标准是:各人所写的文章是都可以基于库提取出关键信息,而关键信息是否符合我们的需求。
所以,首先我们得有一个具体的步骤:对每篇文章进行关键字提取,将提取内容汇总,内容无关的文章应分类到人工分析这一块,即不能利用库进行分析的话,我们就会利用人工分析。而文章的质量也是有要求的,如果文章写得太“水”,太敷衍,那我们也得剔除这部分的数据。而对于每篇文章的提取,我们也需要进行分类,因为我们最终研究的是人们对于十二个一的感受,所以我们要将数据分为12个文件,每个文件中存放对应的一的内容,最后通过使用代码对每个文档进行读取和分析。
在这里插入图片描述
拓展:对12个一进行文本的摘取和分析之后,我们又接触到了另外一个有趣的库:gensim。它可以对两个文本之间的相似度进行分析。当发现这个的时候,我们思考是否能够对比两个文本之间的相似度来分析每个人的思维之间的差异呢?于是我们选择了四名同学的(比较好处理的数据)进行分析。首先把他们的数据导入到txt文件中,换成统一的格式。
在这里插入图片描述
然后两两进行组合分析,对比他们的思维差异。

三、snowNLP库介绍

这个库是国人自己开发的python类库,专门针对中文文本进行挖掘,里面已经有了算法,需要自己调用函数,根据不同的文本构建语料库就可以。
它拥有的功能如下:
在这里插入图片描述
而我们在本实验中运用到了其中的三个功能:情感分析、提取文本关键字、提取摘要。

四、gensim库介绍:

Gensim是一个用于从文档中自动提取语义主题的Python库,十分智能。它可以处理原生,非结构化的数值化文本(纯文本)。其中的算法,比如Latent Semantic Analysis(潜在语义分析LSA),Latent Dirichlet Allocation,Random Projections,通过在语料库的训练下检验词的统计共生模式(statistical co-occurrence patterns)来发现文档的语义结构是非监督的,去哦们仅仅只需要一个语料库的文档集。当得到这些统计模式后,任何文本都能够用语义表示来简洁的表达,并得到一个局部的相似度与其他文本区分开来。

五、处理代码展示

1.利用snowNLP分析十二个一的特征

#_*_coding:utf-8_*_

import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')

from snownlp import SnowNLP


#read txt method one
f = open("C:/Users/16653/Desktop/E.txt",'r', encoding='UTF-8')
line = f.readline()
s=""
while line:
    line = f.readline()
    s+=line
f.close()
 
# print(s)
s = SnowNLP(s)

s.words

print (s.sentiments)#情感系数
print (s.keywords(30))#关键词提取
print("==========================================================================================================")
print (s.summary(10))#自动文摘

2.利用gensim库分析文本相似性

#读取训练数据
def get_datasest(path_qisu):
    with open(path_qisu, 'r',encoding='UTF-8') as cf:
        docs = cf.readlines()
    x_train = []
    for i, text in enumerate(docs):
            word_list = ' '.join(jieba.cut(text)).split(' ') ##保证读入的文件是进行分过词的,我选用的是jieba进行分的词
            l = len(word_list)
            word_list[l - 1] = word_list[l - 1].strip()
            document = TaggededDocument(word_list, tags=[i])
            x_train.append(document)
    return x_train
#进行模型训练
def train(x_train, size=200, epoch_num=1):
    model_dm = Doc2Vec(x_train, min_count=1, window=3, size=size, sample=1e-3, negative=5, workers=4)
    model_dm.train(x_train, total_examples=model_dm.corpus_count, epochs=70)
    model_dm.save('model_sim')
    return model_dm
#给定文档进行测试,并计算相似度
def ceshi(test_text):
    model_dm = Doc2Vec.load('model_sim')
    # test_text = ' '.join(jieba.cut(str1)).split(' ')
    inferred_vector_dm = model_dm.infer_vector(test_text.split(' '))
    # print inferred_vector_dm
    # Gensim 中有内置的 most_similar,得到向量后,可以计算相似性
    sims = model_dm.docvecs.most_similar([inferred_vector_dm], topn=10)
    return sims
#对待计算相似度的文档进行关键信息的抽取
def extract(line):
    ##引用TF-IDF关键词抽取接口
    tfidf = analyse.extract_tags
    ##结巴分词
    str1_fenci = ' '.join(jieba.cut(line))
    ##停用词的去除
    stop_word = []
    with open('stop_word.txt') as fp:
        for line in fp.readlines():
            line = line.strip()
            if line == '':
                continue
            stop_word.append(line.decode('utf-8'))
    str1_rv_stop_word = ''
    str1_rv_stop_word_fenci = ''
    for each in str1_fenci.split(' '):
        if each not in stop_word:
            if str1_rv_stop_word == '':
                str1_rv_stop_word = each
                str1_rv_stop_word_fenci = each
            else:
                str1_rv_stop_word = str1_rv_stop_word + each
                str1_rv_stop_word_fenci = str1_rv_stop_word_fenci + ' ' + each
##关键信息的抽取
    guanjian = tfidf(str1_rv_stop_word)
    guanjian_result = ''
    linshi = []
    for each in str1_rv_stop_word.split(' '):
        if each in guanjian:
            if guanjian_result == '':
                guanjian_result = each
            else:
                guanjian_result = guanjian_result + ' ' + each
                linshi.append(each)
    return guanjian_result

#主函数
if __name__ == '__main__':
    for i in range(0,12):
        path_qisu = name[i][0]
        path_xunwen = name[i][1]
        path_write = name[i][2]
        x_train = get_datasest(path_qisu)
        model_dm = train(x_train)
        ceshi_list = []
        with open(path_xunwen,mode='r',encoding='UTF-8') as fp:
            for line in fp.readlines():
                line = line.strip()
                if line == '':
                    continue
                ceshi_list.append(line)
            f1 = open(path_write,'wb')
            for line in ceshi_list:
                strOri=line+'\n'
                strOri=strOri.encode('utf-8')
                f1.write(strOri)
                line = extract(line) ##关键信息的抽取
                sims = ceshi(line)
                for count, sim in sims:
                    sentence = x_train[count]
                    words = ''
                    for word in sentence[0]:
                        words = words + word + u' '
                    strOri=str(sim)+'\n'
                    strOri=strOri.encode('utf-8')
                    f1.write(strOri)
                    f1.write(words.encode('utf-8'))
                    f1.write('\n'.encode('utf-8'))
                    f1.write('\n'.encode('utf-8'))
            f1.close()

六、统计数据及其相关数据的分析说明
  • 数据结果:
    实验数据来源:四个班的作业“十二个“一”的文艺创作”,对每一个“一”的相关创作放入同一个txt文档,共计12个文档。
    实验工具:python3+NLP库。
    实验流程:分别对描述十二个“一”的文档进行文本分析,保存分析结果。
    实验参数:提取关键词30个,自动摘取文献10句
    实验初始结果如下:
    在这里插入图片描述
  • 分析说明
    上面的关键词提取结果中出现比较有意义的“人”、“性格”、“感觉”、“团队”、“力量”、“武器”、“公司”等,体现出来这“十二个一的文艺创作”里面大部分都是围绕着人的性格、或者武器的一些威力来展开创作的。而上面的文摘才是最有价值的信息,进一步整理如下:
    在这里插入图片描述
  • 上图中的A、H、I、J、K,通过读取文摘我们不难发现,绝大部分的人对这些“一”有着不同程度和不同方面上的好感,而且对同一个“一”的评价比较统一,比如对于“I”,“活泼”,“亲和”的感受是大家相通的。对于“K”,大家则觉得我温柔。
  • B、C、E、F、G则是大家褒贬参半的书法字体,就拿B来说,既有人觉B不善表达,也有人认为B自在潇洒。即使褒贬参半,即使各有爱,但是除去感情色彩的词语描述后,数据中人们对每个字体的感受却没有什么大冲突,甚至有些数据里出现惊人的相似感,比如G,“尖锐”、“强”和“直接”是人们所共同认可的感受,只不过喜不喜欢这种特性决定了人们对它的态度。
  • D和L是大家共同排斥的书法作品,D的线条没有其他作品的流畅,笔划也是平平无奇,人们普遍认为只是一个平庸低调的“人”,而L作品的线条细,有一种断断续续的感觉,人们就大多觉得这个“一”十分脆弱。
    (2)关于文本相似度的研究
    在这里选取了我们四名同学的数据进行分析研究,探究她们四人之间描述文本之间的相似度,从而分析人的思维相似度。(以下实验数据中的人名没有给出全名)
    在这里插入图片描述
    在这里插入图片描述
  • 同样的两个人,主被动关系不一致,计算出来的文本相似性不一致。
  • 或许这种表示方式能够反应一个人说话的独特性与否,若文本相似性越高,说明她描述的语言更加能够为大家所接收,所理解。
  • 原本是想通过最后得出的数据进行男女生思维的研究分析的(或许性别会对思维的相似度产生影响?关系比较好的人思维方式也会比较相似?)但是最后的实验数据却没有展现给我们一个很好的情况,一个人和其他人的文本相似度之间并没有太大的差别。但是这个差异在单个人的所有数据的对比中区别却很大。

最后我们提取的结果,如果有需要,可以私信

发布了28 篇原创文章 · 获赞 4 · 访问量 5391

猜你喜欢

转载自blog.csdn.net/Program_dancing/article/details/103655838