Полный исходный код можно получить в общедоступной учетной записи: «01 двоичный», фоновый ответ: «Чжай Тяньлинь».
Вчера был Фестиваль Фонарей.В Нанкине, когда Фестиваль Фонарей наступает, это означает, что год закончился, и мы должны вернуться к своим рабочим местам. Говорят, что в этом году много дынь (типа тыквенных младенцев), но я думаю, что самые сладкие во время китайского Нового года - это Чжай Тяньлинь.Что такое Хаунет?"Ни за что.
Некоторое время назад на Weibo начали появляться новости об академических проступках Чжай Тяньлиня и плагиате статей, так что в этом были замешаны его наставник, декан и даже вся Пекинская киноакадемия.
Обычно я не уделяю много внимания индустрии развлечений, поэтому сначала не принял это близко к сердцу. Только когда в Интернете появилась новость о том, что диссертация Чжай является плагиатом диссертации Чэнь Куня в большом количестве, я заинтересовался статьей этого развлекательного доктора. Далее, давайте проанализируем хардкор статьи Ся Чжая с точки зрения программиста.
лабораторная среда
Если вы хотите сделать хорошую работу, вы должны сначала заточить свои инструменты.Прежде чем начать анализ, я сначала объясню экспериментальную среду, в которой проводится этот анализ, чтобы избежать аномалий:
- MacOS 10.14.3
- Python 3.6.8 (Анаконда)
- Visual Studio Code
- Используемые пакеты:
- пкусег (причастие)
- matplotlib (черчение)
- облако слов
- numpy (математические расчеты)
- sklearn (машинное обучение)
Сбор данных
Честно говоря, сначала я подумал, что даже если Чжай не знает, что такое «HowNet», «HowNet» должен включать в себя статьи Чжай, но я долго искал в HowNet и не смог найти статьи Чжай. был сегодня в заголовках.Нашел его статью оdata/zhai.txt
середина. Говоря об этом, я действительно хочу поблагодарить Чжай Тяньлиня, именно благодаря ему все стали настолько академически мотивированы, что начали изучать бакалаврские, магистерские и докторские диссертации.
очистка данных
В предыдущем разделе мы сохранили его статью в txt, поэтому нам нужно сначала загрузить статью в память:
# 数据获取(从文件中读取)
def readFile(file_path):
content = []
with open(file_path, encoding="utf-8") as f:
content = f.read()
return content
Я насчитал, исключая заголовок в начале и слова благодарности в конце, всего 25 005 слов.
Далее мы подошли к очистке данных, здесь я используюpkusegКонтент обрабатывается путем сегментации слов, и результат сегментации слов выводится после удаления стоп-слов.
Так называемые стоп-слова — это слова, не имеющие определенного значения в контексте, такие как этот, тот, ты, я и другие, а также знаки препинания и так далее. Поскольку никто не использует эти бессмысленные стоп-слова при поиске, чтобы улучшить эффект сегментации слов, я должен отфильтровать эти стоп-слова.
# 数据清理(分词和去掉停用词)
def cleanWord(content):
# 分词
seg = pkuseg.pkuseg()
text = seg.cut(content)
# 读取停用词
stopwords = []
with open("stopwords/哈工大停用词表.txt", encoding="utf-8") as f:
stopwords = f.read()
new_text = []
# 去掉停用词
for w in text:
if w not in stopwords:
new_text.append(w)
return new_text
Результаты:
Здесь я делаю два замечания:
- Для чего используется инструмент сегментации словpkusegвместоjieba?
pkusegЭто инструмент сегментации слов, запущенный Пекинским университетом по официальному адресу:GitHub.com/bluecopcool/PK…
- Зачем использовать список стоп-слов Харбинского технологического института?
Адрес загрузки списка стоп-слов:GitHub.com/Y UE Yong Dev/…
список стоп-слов | Типы текста, которые работают лучше |
---|---|
Список стоп-слов Харбинского технологического института | Литература и периодические тексты |
Список стоп-слов Baidu | текст новостного репортажа |
Список стоп-слов Сычуаньского университета | текст электронного документа |
Ссылки: Гуань Цинь, Дэн Саньхун, Ван Хао. Сравнительное исследование часто используемых списков стоп-слов для кластеризации китайского текста [J]. Анализ данных и обнаружение знаний, 2006, 1 (3).
Если вы заинтересованы в прочтении этой статьи, вы можете получить ее в общедоступной учетной записи: "01 Binary" фоновый ответ: "Сравнительное исследование списка стоп-слов"
Статистика
Говорят, что это статистика данных, но на самом деле хорошей статистики нет.Для упрощения здесь нужно подсчитать частоту каждого слова, а затем вывести 15 слов с наибольшей частотой слов.
# 数据整理(统计词频)
def statisticalData(text):
# 统计每个词的词频
counter = Counter(text)
# 输出词频最高的15个单词
pprint.pprint(counter.most_common(15))
Результат напечатан:
Он действительно редкий "хороший актер", который может воплотить персонажей в жизнь. Даже если его нет в наличии, он все равно использует свои актерские способности, чтобы создать себе "ученого тирана". Персонажи настолько полны, может быть, это это искусство созидания!
Слова, о которых больше всего говорят в статье, это жизнь, роль, характер и характер. Это как раз и есть дух хорошего актера. Если превратить эти слова воблако словЕсли да, то эффект может быть лучше.
Создать облако слов
Часть слова «генерация облака», которую я использую,wordcloudБиблиотека очень проста в использовании, и есть много онлайн-руководств.Здесь следует упомянуть одну вещь: чтобы предотвратить появление искаженных китайских символов, необходимо настроитьfont_pathэтот параметр. Китайские шрифты можно выбрать в системе или найти в Интернете, здесь я рекомендую бесплатный сайт для загрузки китайских шрифтов:woohoo.mungbeansoup.com/this/0/0/1/1. …
Вот код для создания облака слов:
# 数据可视化(生成词云)
def drawWordCloud(text, file_name):
wl_space_split = " ".join(text)
# 设置词云背景图
b_mask = plt.imread('assets/img/bg.jpg')
# 设置词云字体(若不设置则无法显示中文)
font_path = 'assets/font/FZZhuoYTJ.ttf'
# 进行词云的基本设置(背景色,字体路径,背景图片,词间距)
wc = WordCloud(background_color="white",font_path=font_path, mask=b_mask, margin=5)
# 生成词云
wc.generate(wl_space_split)
# 显示词云
plt.imshow(wc)
plt.axis("off")
plt.show()
# 将词云图保存到本地
path = os.getcwd()+'/output/'
wc.to_file(path+file_name)
Истинный и ложный Ли Куй (сравнение статей)
Проанализировав "Ли Гуй", нам необходимо пригласить его настоящего брата "Ли Куй". Это та же процедура, что и раньше. Сначала находим данные, а затем сегментируем слова для подсчета частоты слов. Повторяться не будем. операция здесь, и сразу отпустите карту облака слова.
Глядя на эту картинку, чувствуете ли вы, что она очень похожа на изображение облака слов Чжай, так насколько же похож этот «истинный и ложный Ли Куй»? Далее давайте посчитаем сходство между двумя следующими статьями.
сравнение сходства статей
TF-IDF
Есть много способов сравнить сходство статей, и используется много категорий моделей, в том числеTF-IDF,LDA,LSIПодождите, для удобства для сравнения используется только TF-IDF.
TF-IDF на самом деле добавляет информацию IDF на основе частоты слов TF. IDF называется обратной частотой документа. Если вы этого не понимаете, вы можете прочитать объяснение г-на Жуана Ифэна:Вууху. Руань Ифэн.com/blog/2013/0…, объяснение TFIDF также очень подробное.
Sklearn
scikit-learn, также известный как sklearn, является одним из самых известных модулей Python в области машинного обучения.Официальный адрес:GitHub.com/SCI комплект-Обучение…Модули в SklearnTfidfVectorizerЧтобы вычислить сходство между двумя статьями, код выглядит следующим образом:
# 计算文本相似度
def calculateSimilarity(s1, s2):
def add_space(s):
return ' '.join(cleanWord(s))
# 将字中间加入空格
s1, s2 = add_space(s1), add_space(s2)
# 转化为TF矩阵
cv = TfidfVectorizer(tokenizer=lambda s: s.split())
corpus = [s1, s2]
vectors = cv.fit_transform(corpus).toarray()
# 计算TF系数
return np.dot(vectors[0], vectors[1]) / (norm(vectors[0]) * norm(vectors[1]))
В дополнение к Sklearn мы также можем использоватьgensimНазовите несколько моделей для расчета.Учитывая объем статьи, читатели сами должны собрать данные.
После того, как мы передаем статью Чжая и статью Чена в эту функцию соответственно, результат будет таким:
两篇文章的相似度为:
0.7074857881770839
На самом деле, я был очень удивлен этим результатом, я знал только, что этот «Ли Гуй» похож, но не ожидал, что сходство будет выше 70,7%. Конечно, Чжай, как младший брат, ничто по сравнению с Ву Сюбо. ?
Полный исходный код можно получить в общедоступной учетной записи: «01 двоичный», фоновый ответ: «Чжай Тяньлинь».