婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Go語言實現自動填寫古詩詞實例代碼

Go語言實現自動填寫古詩詞實例代碼

熱門標簽:惠州電銷防封電話卡 建造者2地圖標注 黃岡人工智能電銷機器人哪個好 汕頭小型外呼系統 濱州自動電銷機器人排名 鄭州亮點科技用的什么外呼系統 釘釘有地圖標注功能嗎 阿里云ai電話機器人 浙江高頻外呼系統多少錢一個月

前言

“白日依山盡,___”。下句自然填黃河入海流,那么“日月忽其不淹兮,___,___,恐美人之遲暮”,中間兩句怎么填呢?

最近工作中有個需求,就是1500道語文詩詞填空題沒有答案,現在需要給這些題目大爺們匹配它們對應的答案,好在題目信息都很完整,指出了詩詞出處、作者信息。自然想到到網上爬取對應文章信息然后字符串匹配答案。目前做完,效果還可以,基本上所有題目的答案都有了,現把操作流程記錄下,做個總結。

1. 文章信息獲取

網上找了很久,目前發現百度漢語對古詩詞收錄的比較好,格式也比較規范,整個爬取過程還是比較簡單,瀏覽器分析網站,找到它們的搜索接口:http://hanyu.baidu.com/hanyu/ajax/sugs只需要傳一個參數:mainkey,是一個urlencode格式的字符串。接口會返回一個匹配列表,再用作者名稱對這個列表做篩選,詳細代碼如下:

 baseUrl := "http://hanyu.baidu.com/hanyu/ajax/sugs?"
 client := http.Client{
 }
 u, _ := url.Parse(baseUrl)
 q := u.Query()
 q.Set("mainkey", name)
 u.RawQuery = q.Encode()

 //添加Header
 req, _ := http.NewRequest("GET", u.String(), nil)
 req.Header.Add("User-Agent", `Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36`)
 req.Header.Add("DNT", "1")
 req.Header.Add("Host", "hanyu.baidu.com")
 req.Header.Add("Accept-Language", "zh-CN,zh;q=0.8")
 req.Header.Add("Referer", "http://hanyu.baidu.com/shici/detail?pid=be520db056da43238035dc18bb1e1798tn=sug_click")
 
 resp, errDo := client.Do(req)

拿到返回值以后,篩選出對應的作者信息。

//如果有多個搜索結果,比對author是否正確
 respJson.ForEach(func(key, value gjson.Result) bool {
 //先看看有沒有display_name
 displayName := value.Get("display_name.0").String()
 sid := value.Get("sid.0").String()
 if len(displayName) == 0 {
 //不是這條記錄
 return true
 }

 //看看type
 typeStr := value.Get("type.0").String()
 if typeStr == "poemline"{
 //取Source
 displayName = value.Get("source_poem.0").String()
 sid = value.Get("source_poem_sid.0").String()
 }

 literatureAuthor := value.Get("literature_author.0").String()
 //author是否一致
 if literatureAuthor == author {
 searchResult.Sid = sid
 searchResult.DisplayName = displayName
 searchResult.Author = literatureAuthor
 return false
 }
 return true // keep iterating
 })

SearchResult保存了搜索到的結果,根據sid拿到文章頁面,解析出其中的文章。

func GetContent(sid string) (content string, err error) {
 baseUrl := "http://hanyu.baidu.com/shici/detail"

 result := make([]string, 0, 0)
 client := http.Client{
 }

 u, _ := url.Parse(baseUrl)
 q := u.Query()
 q.Set("pid", sid)
 u.RawQuery = q.Encode()

 req, _ := http.NewRequest("GET", u.String(), nil)
 req.Header.Add("User-Agent", `Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36`)
 req.Header.Add("DNT", "1")
 req.Header.Add("Host", "hanyu.baidu.com")
 req.Header.Add("Accept-Language", "zh-CN,zh;q=0.8")
 req.Header.Add("Referer", "http://hanyu.baidu.com/shici/detail?pid=be520db056da43238035dc18bb1e1798tn=sug_click")

 resp, errDo := client.Do(req)

 if errDo != nil || resp.StatusCode != 200 {
 err = errors.New("無法連接百度漢語 " + errDo.Error())
 return
 }

 docm, errDoc := goquery.NewDocumentFromResponse(resp)

 if errDoc != nil {
 err = errors.New("解析Doc錯誤 " + errDoc.Error())
 return
 }

 //詩詞信息都保存在 body_p 的div中,可以通過PuerkitoBio/goquery庫獲取
 pSelect := docm.Find("#body_p")
 pSelect.Each(func(pos int, selection *goquery.Selection) {
 content := strings.TrimSpace(selection.Text())
 result = append(result, content)
 })

 content = strings.Join(result, "")
 return
}

目前會爬取百度漢語、古詩詞兩個網站的數據,如果有更好的數據源,只需要實現Spider接口,在MapSpiderManifest()方法中注冊即可。

type Spider interface {
 GetContent(SearchResult) (string, error)
 FindContent(string, string) (SearchResult, error)
}

func MapSpiderManifest() map[string]Spider {
 //初始化并且注冊所有的Spider
 spiderMap := make(map[string]Spider)

 //百度
 baiduSpider := new(BaiduSpider)
 spiderMap["baiduSpider"] = baiduSpider

 //古詩文網
 gushiwenSpider := new(GushiwenSpider)
 spiderMap["gushiwenSpider"] = gushiwenSpider
 return spiderMap
}

2.詩詞句子查找

古詩文默寫,以前上學的時候做的多了,把一句話摳出來,隨機選其中幾段話讓學生默寫。一般可以歸類為一下幾種模式:

開頭留空 :_,[_,...],何人不起故園情。
末尾留空:俱往矣,_,[_,...]。
中間留空:月出于東山之上,_,白露橫江,

不管是什么樣的模式,就每個填空處來看,只有它前面或者后面有提示句,我們才能知道這個空的答案是什么。也就是說,這樣的填空可以自主的找到答案,姑且稱之為自主空。而前后都沒有提示句的空,只能等待附近有自主空找到了答案,才能找到它本身的答案,用一個圖說明更加清晰:

圖中灰色的塊因為有提示句,所以可以通過步驟一種爬取下來的文章內容找到對應的答案,填入Blank中,具體的查找算法如下代碼所示:

//已知newFind的PreString,求BlankString和PostString
func makeWithPreContent(contentsSplit []string, newFind *Find) {
 for l := range contentsSplit {
 if isEqual(contentsSplit[l], newFind.PreString)  l  len(contentsSplit)-1 {
 newFind.BlankString = contentsSplit[l+1]
 if l  len(contentsSplit)-2 {
 newFind.PostString = contentsSplit[l+2]
 }
 newFind.BlankFinish = true
 }
 }
}

//已知newFind的PostString,求BlankString和PreString
func makeWithPostContent(contentsSplit []string, newFind *Find) {
 for l := range contentsSplit {
 if isEqual(contentsSplit[l], newFind.PostString)  l > 0 {
 newFind.BlankString = contentsSplit[l-1]
 if l-1 > 0 {
 newFind.PreString = contentsSplit[l-2]
 }
 newFind.BlankFinish = true
 }
 }
}

// 按標點符號分隔內容
func SplitByPunctuation(s string) ([]string, []string) {
 regPunctuation, _ := regexp.Compile(`[,,。.??!!;;::]`)
 //匹配標點符號,保存下來。 然后分割字符串
 toPun := regPunctuation.FindAllString(s, -1)
 result := regPunctuation.Split(s, -1)

 if len(result[len(result)-1]) == 0 {
 result = result[:len(result)-1]
 }

 //去掉前后空格,去掉引號
 for i := range result {
 result[i] = strings.TrimSpace(result[i])
 regQuoting := regexp.MustCompile("[“”‘'']")
 result[i] = regQuoting.ReplaceAllString(result[i], "")
 }
 return result, toPun
}

所有的自主塊都找到答案后,可以把每個自主塊看作一個雙向鏈表的表頭,我們所要做的就是遍歷每個雙向鏈表,把其中每個節點的答案都通過查找算法找出來。當下一個節點是NULL,或者下個節點是一個自主塊時,就停止遍歷,處理下一個雙向鏈表。這樣,無論給出的需要填空的內容多么復雜,都可以順利的完整自動填寫工作。

3.效果

一些常用的文言文或詩詞:

1、 前赤壁賦

2、 離騷


項目地址:AncientPoetryFillBlank (本地下載)

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • go語言實現通過FTP庫自動上傳web日志

標簽:瀘州 滄州 阿壩 昭通 晉中 泰安 駐馬店 東營

巨人網絡通訊聲明:本文標題《Go語言實現自動填寫古詩詞實例代碼》,本文關鍵詞  語言,實現,自動,填寫,古詩詞,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Go語言實現自動填寫古詩詞實例代碼》相關的同類信息!
  • 本頁收集關于Go語言實現自動填寫古詩詞實例代碼的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    激情深爱一区二区| 一区二区视频免费在线观看| 亚洲一区二区三区四区在线| 欧美日韩卡一卡二| 精品国产免费视频| 亚洲国产精品久久久男人的天堂| 中文字幕不卡一区| 亚洲一区二区欧美| 成人综合婷婷国产精品久久蜜臀 | wwwwxxxxx欧美| 精品盗摄一区二区三区| 欧美国产综合一区二区| 成人视屏免费看| 日韩三级视频中文字幕| 丝袜诱惑亚洲看片| 成人av动漫在线| 欧美视频一区在线| 欧美夫妻性生活| 国产精品自产自拍| 欧美剧情片在线观看| 国产三区在线成人av| 色香蕉久久蜜桃| 欧美调教femdomvk| 国产精品成人在线观看| 蜜臀99久久精品久久久久久软件| 欧美日韩久久一区二区| 亚洲精品ww久久久久久p站| 国产一区二区视频在线| 在线看国产日韩| 欧美一级生活片| 一区二区三区精品视频在线| 99精品视频中文字幕| 欧美中文字幕一区二区三区| 亚洲欧美在线观看| 美女www一区二区| 国产成人午夜视频| 欧美在线观看一区二区| 亚洲午夜视频在线观看| 国产老妇另类xxxxx| 欧美少妇性性性| 久久午夜免费电影| 色偷偷成人一区二区三区91 | 欧美午夜精品久久久久久孕妇 | 国产欧美一区视频| 99久久伊人久久99| 综合久久久久久| 国产精品综合二区| 欧美在线制服丝袜| 国产精品一二三四| 欧美吞精做爰啪啪高潮| 久久久久久亚洲综合影院红桃| 欧美一区二区三区四区高清| 播五月开心婷婷综合| 欧美激情综合在线| 天堂一区二区在线| 色女孩综合影院| 豆国产96在线|亚洲| 久久精品视频免费观看| 经典一区二区三区| 日本视频一区二区| 尤物视频一区二区| 99久久伊人网影院| 中文字幕一区二区5566日韩| 在线视频国内自拍亚洲视频| 欧美国产亚洲另类动漫| 国产精品羞羞答答xxdd| 欧美日韩久久久久久| 国产成人综合精品三级| 久久精品理论片| 久久婷婷色综合| 国产超碰在线一区| 91精品国产综合久久国产大片| 国产99久久久国产精品潘金 | 久久久久久久综合狠狠综合| 亚洲影院在线观看| 中文字幕av一区二区三区高| 国产1区2区3区精品美女| 日韩一区二区电影网| 成人av综合在线| 国产在线一区观看| 欧美夫妻性生活| 国产婷婷色一区二区三区四区| 国产精品美日韩| 精品欧美乱码久久久久久1区2区 | 国产美女精品在线| 播五月开心婷婷综合| www.欧美.com| 一本大道综合伊人精品热热| 久久 天天综合| 国内国产精品久久| 一本一道久久a久久精品综合蜜臀 一本一道综合狠狠老 | 国产乱子伦视频一区二区三区| 精品人在线二区三区| 欧美亚洲图片小说| 国产一区二区福利视频| 秋霞av亚洲一区二区三| 久久精品人人做人人爽人人| 欧美日韩亚洲不卡| 欧美大片一区二区三区| 国产精品久久久久国产精品日日| 欧洲av一区二区嗯嗯嗯啊| 欧美精品日韩综合在线| 日韩欧美另类在线| 亚洲日本中文字幕区| 亚洲欧美偷拍另类a∨色屁股| 国产精品国模大尺度视频| 亚洲乱码国产乱码精品精的特点| 日本在线不卡视频| 99国产精品久久久久久久久久久| 亚洲一区二区三区激情| 成人美女视频在线看| 欧美乱妇20p| 国产三级一区二区| 青青草精品视频| 欧美午夜一区二区三区 | av在线不卡观看免费观看| 欧美日韩aaaaa| 久久久久久久久久久久久久久99 | 亚洲免费观看高清完整版在线观看| 亚洲福利电影网| 99re这里都是精品| 久久精品综合网| 捆绑紧缚一区二区三区视频| 欧美三级日韩三级国产三级| 欧美一区二区三区在| 伊人一区二区三区| 国产91综合一区在线观看| 精品美女一区二区三区| 性做久久久久久免费观看欧美| 91在线视频免费观看| 国产日产欧产精品推荐色| 国内精品国产成人国产三级粉色| 日韩欧美专区在线| 日本不卡在线视频| 4438x亚洲最大成人网| 亚洲一区二区三区小说| 欧美网站一区二区| 三级久久三级久久久| 欧美电影一区二区| 天堂精品中文字幕在线| 欧美人与禽zozo性伦| 中文字幕一区二区视频| 99精品视频一区二区| 欧美精品一区二区三区久久久 | 久久99精品国产| 日韩欧美亚洲国产精品字幕久久久| 午夜av一区二区| 4hu四虎永久在线影院成人| 日日夜夜精品视频天天综合网| 在线视频一区二区免费| 亚洲一区免费视频| 久久国产精品免费| 色久优优欧美色久优优| 亚洲午夜日本在线观看| 91久久久免费一区二区| 亚洲午夜久久久| 在线播放欧美女士性生活| 日韩电影在线观看网站| 91 com成人网| 国精产品一区一区三区mba视频| 日韩一区二区三区在线观看| 亚洲欧美在线高清| 国产成人午夜视频| 亚洲综合免费观看高清完整版在线 | 91亚洲国产成人精品一区二区三 | 亚洲国产精品一区二区尤物区| 91女人视频在线观看| 亚洲一区二区在线免费观看视频 | 欧美老肥妇做.爰bbww视频| 久久99精品久久久久久动态图| 精品国产免费一区二区三区香蕉| 国产成人精品免费网站| 亚洲自拍与偷拍| 欧美zozozo| 一本一道综合狠狠老| 日韩电影在线免费| 一区二区三区在线视频观看58| 精品国产乱码久久久久久免费| eeuss鲁一区二区三区| 免费成人在线播放| 中文成人综合网| 欧美大片拔萝卜| 成人黄色国产精品网站大全在线免费观看| 亚洲精品欧美在线| 国产欧美一区二区精品久导航| 欧美一区在线视频| 色狠狠综合天天综合综合| 国产高清精品久久久久| 日韩中文字幕区一区有砖一区 | 免费成人美女在线观看| 精品久久五月天| 欧美日韩精品免费| 91视频在线观看免费| 国产黑丝在线一区二区三区| 日本最新不卡在线| 丝袜亚洲另类欧美| 亚洲女女做受ⅹxx高潮| 国产精品天美传媒| 日韩一区二区精品| 91精品国产91久久久久久最新毛片 |