在机器学习领域中,自然语言处理是一个重要的分支,它面临着诸多挑战,如如何进行分词、识别实体关系等。本文作者使用 Jieba、Word2Vec 和 NetworkX 工具结合在一起,对《倚天屠龙记》进行了自然语言分析。作者希望通过这种方式提供一些新颖的观点。以下是本文的核心内容:
通过对《倚天屠龙记》进行自然语言处理,我们得到了一些有趣的结果。书中人物张无忌有着多种称呼,如“张无忌”、“无忌”、“张教主”等。这些称呼反映了他在不同场合下的身份变化。
值得注意的是,赵敏并未出现在上述网络关系图中,因为 Word2Vec 认为张无忌和赵敏的相似度并不高。这可能是因为小说中赵敏与张无忌的关系发展较为突然,而在现实中这种关系可能不会如此紧密。
```python import numpy as np import pandas as pd import jieba import jieba.posseg as posseg
renmingfile = "yttljrenming.csv" jieba.loaduserdict(renmingfile) stopwordsfile = "stopwordshagongdakuozhan.txt" stopwords = pd.readcsv(stopwordsfile, header=None, quoting=3, sep="t").values[0]
corpus = "yttlj.txt" yttlj = pd.read_csv(corpus, encoding="gb18030", header=None, names=["sentence"])
def cutjoin(s): news = list(jieba.cut(s, cutall=False)) stopwordsextra = set([""]) for seg in news: if len(seg) == 1: stopwordsextra.add(seg) news = set(news) - set(stopwords) - stopwordsextra result = ",".join(news) return result
def extractname(s): news = posseg.cut(s) words = [] flags = [] for k, v in news: if len(k) > 1: words.append(k) flags.append(v) fullwf["word"].extend(words) full_wf["flag"].extend(flags) return len(words)
numfeatures = 300 minwordcount = 20 numworkers = 4 context = 20 downsampling = 1e-3
from gensim.models import word2vec
modelfilename = 'yttljmodel.txt' model = word2vec.Word2Vec(sentences, workers=numworkers, size=numfeatures, mincount=minwordcount, window=context, sample=downsampling)
model.save(modelfilename)
entity = pd.readcsv("combinedrenming.csv", header=None, indexcol=None) entity = entity.rename(columns={0: "Name"}) entity = entity.setindex(["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() 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")
import networkx as nx import matplotlib.pyplot as plt import pandas as pd import numpy as np import pygraphviz from networkx.drawing.nxagraph import graphvizlayout
```
通过以上分析,我们可以更好地理解《倚天屠龙记》中的人物关系,并且可以将这种方法应用于其他文本分析任务中。希望这些内容能够为读者带来一些启发和帮助。