• Stars
    star
    221
  • Rank 179,773 (Top 4 %)
  • Language
    Python
  • License
    MIT License
  • Created about 8 years ago
  • Updated almost 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

批踢踢推文產生器

PTT Chat Generator

本專案的目的在實作一個推文產生器,由使用者輸入一個隨機標題,即能回覆一個恰當的推文,目前仍在進行中 d(`・∀・)b

目前成果

MianBot: 您好,我是你的老朋友眠寶,讓我們來聊聊八卦吧 o_o

User: 為什麼李嚴要炸三隻蝦
MianBot: 一隻給小當家、一隻給及弟,另一隻給誰我不能說

User: 蘇美守得住街亭嗎
MianBot: 目前的戰力來看別說守街亭 都可以直接滅了曹魏

User: 起床第一件事要做什麼?
MianBot: 張開眼睛 給你參考

User: 初音只是個軟體嗎
MianBot: 初音是軟體 但是初音不只是個軟體

User: 有沒有鳳梨的八卦
MianBot: 聽說把鳳梨跟筆合在一起,就會變鳳梨筆

User: 肥宅要怎樣才有加分
MianBot: 減肥 先從脫離肥宅開始

User: 熊貓麻婆是怎麼贏豆腐三重奏的
MianBot: 小當家表示:張大人你好,我媽阿貝師傅,我爸李提督

User: obov現在還好嗎
MianBot: 你問的是前面還是後面?

User: 如果時間能重來,你想做什麼
MianBot: 珍惜身邊的人

類別說明

  • PTT-Crawler: 用於爬取 PTT 頁面的原始文章
  • filter.py: 用於過濾 PTT-Crawler 爬取下來的文章,如濾除某些標籤或某些使用者的文章,或是濾除內容重覆的文章等
  • article.py: 儲存 PTT 文章的結構,會將分段式的回覆合併起來
  • corpus.py: 保存 Article 的結構,可遍歷文章的標題、內容
  • match.py: 調用不同的 Matcher 實驗
  • Matcher: 用於文本相似度的比對,將使用者的輸入與 Corpus 裡所有標題比較,回傳最相似的標題與索引
    • FuzzyMatcher: 基於 Levenshtein Distance 比對短語相似度
    • VectorMatcher: 基於 sentence2vec 比對短語相似度 TODO!
    • KeywordMatcher: 基於 tf/idf 比對短語相似度
    • bm25Matcher: 基於 Okapi BM25 (基於 snownlp),目前默認採用該算法
  • ResponsesEvaluate: 從推文中挑選出最佳推文
    • Evaluator: 基於推文的詞頻來選取最佳回應
    • ClusteringEvaluator: 基於聚類來選取最佳回應 TODO !

套件需求

  • jieba : 中文隱性馬可夫模型斷詞器
  • gensim : 使用詞袋、tfidf、word2vec
  • fuzzywuzzy : 模糊字串比對
    • python-Levenshtein : 用於優化 fuzzywuzzy 計算速度的套件包
  • sentence2vec (非必要)

Data 說明

  • raw: 儲存PTT-Crawler爬取的原始資料
  • processed: 儲存已經篩選過的文章(如濾除特定標籤、使用者)
    • reply: 儲存文章回應,每 1000 筆為一個檔案(目前未上傳至 Github)
  • processed_seged: 儲存文章或回應的斷詞結果
  • stopwords: 儲存常用中文停用詞、PTT 停用詞、負面標籤
  • User_info: 基於 raw 的使用者推噓文紀錄
  • Titles.txt: 存放篩選後的文章標題
  • SegTitles.txt: 存放已完成斷詞的篩選後文章標題

實驗簡述

  1. 使用 PTT-Crawler 爬取文章後放置於 "data/raw/"
  2. 使用 filter.py 從原始資料裡挑選出需要的資料
  • ArticleFilter.load_processed_corpus(): 用於載入先前處理好的語料(會載入 data/processed/ 中所有檔案)
  • ArticleFilter.process_raw_data(): 對 "data/raw/" 中的原始資料進行處理(如去除特定tag,過濾敏感回應等)
  • ArticleFilter.print_titles(): 輸出處理好的文章標題
  • ArticleFilter.print_response() : 輸出處理好的文章回應
  • 為維持文章結構的一致性,使用 print_titles() 建議也呼叫 print_response()
  1. 使用 match.py 測試匹配結果
  • 因為斷詞文件 (SegTitles.txt) 有些 matcher 不會用到,所以更新 Corpus 後請記得刪除已斷詞文件並重新斷詞

測試用資料集

  • 請前往這邊下載,解壓縮後放置於 data 資料夾下, reply.rar 解壓縮後的回覆請放置於 data/processed 中。

  • 如果只想特別使用抽取完畢的問答配對,可以前往 PTT 中文語料 了解進一步的資訊 :>

More Repositories

1

Chatbot

基於向量匹配的情境式聊天機器人
Python
898
star
2

word2vec-tutorial

中文詞向量訓練教學
Python
517
star
3

Gossiping-Chinese-Corpus

PTT 八卦版問答中文語料
Jupyter Notebook
236
star
4

DeepToxic

top 1% solution to toxic comment classification challenge on Kaggle.
Jupyter Notebook
193
star
5

CIKM-AnalytiCup-2018

[ACM-CIKM] 2nd place solution at CIKM AnalytiCup 2018, a task for determining short text similarities.
Python
76
star
6

Sequence-to-Sequence-101

a series of tutorials on sequence to sequence learning, implemented with PyTorch.
Python
71
star
7

WSDM-Cup-2019

[ACM-WSDM] 3rd place solution at WSDM Cup 2019, Fake News Classification on Kaggle.
Jupyter Notebook
64
star
8

PTT-Crawler

A web crawler specifically for PTT website.
Python
19
star
9

Line-Chatbot

Rule-based Line chatbot demo, constructed with django.
Python
18
star
10

Fill-the-GAP

[ACL-WS] 4th place solution to gendered pronoun resolution challenge on Kaggle
Jupyter Notebook
12
star
11

Luis-LineBot

a chatbot published on line, using LUIS for intent classification.
Python
7
star
12

NCKU-Online-Judge

Demonstration of an Online Judge System.
JavaScript
4
star
13

Kyara

Enhancing Chinese Understanding for LLM with Knowledge-Augmented Fine-Tuning.
4
star
14

TensorFlow-Study-Notes

HTML
3
star
15

HS-Chess

🎲 a 2D chess game with the HearthStone theme.
Java
2
star
16

zake7749.github.io

Personal blog.
HTML
2
star
17

Fantasy-Invision

🚀 a simple vertically scrolling shoot 'em up game.
C#
2
star
18

SVM-with-Shiny

an example for support vector machine and shiny usage
R
2
star
19

MNIST

a Keras CNN autoencoder to solve the Kaggle Competition MNIST.
Python
2
star
20

AboutMe

My brief history.
CSS
1
star