国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Python容錯的前綴樹實現中文糾錯

瀏覽:30日期:2022-06-15 11:28:33
目錄介紹實現參考介紹

本文使用 Python 實現了前綴樹,并且支持編輯距離容錯的查詢。文中的前綴樹只存儲了三個分詞,格式為 (分詞字符串,頻率) ,如:(’中海晉西園’, 2)、(’中海西園’, 24)、(’中南海’, 4),可以換成自己的文件進行數據的替換。在查詢的時候要指定一個字符串和最大的容錯編輯距離。

實現

class Word: def __init__(self, word, freq):self.word = wordself.freq = freqclass Trie: def __init__(self):self.root = LetterNode(’’)self.START = 3 def insert(self, word, freq):self.root.insert(word, freq, 0) def findAll(self, query, maxDistance):suggestions = self.root.recommend(query, maxDistance, self.START)return sorted(set(suggestions), key=lambda x: x.freq)class LetterNode: def __init__(self, char):self.REMOVE = -1self.ADD = 1self.SAME = 0self.CHANGE = 2self.START = 3self.pointers = []self.char = charself.word = None def charIs(self, c):return self.char == c def insert(self, word, freq, depth):if ’ ’ in word: word = [i for i in word.split(’ ’)]if depth < len(word): c = word[depth].lower() for next in self.pointers:if next.charIs(c): return next.insert(word, freq, depth + 1) nextNode = LetterNode(c) self.pointers.append(nextNode) return nextNode.insert(word, freq, depth + 1)else: self.word = Word(word, freq) def recommend(self, query, movesLeft, lastAction):suggestions = []length = len(query)if length >= 0 and movesLeft - length >= 0 and self.word: suggestions.append(self.word)if movesLeft == 0 and length > 0: for next in self.pointers:if next.charIs(query[0]): suggestions += next.recommend(query[1:], movesLeft, self.SAME) breakelif movesLeft > 0: for next in self.pointers:if length > 0: if next.charIs(query[0]):suggestions += next.recommend(query[1:], movesLeft, self.SAME) else:suggestions += next.recommend(query[1:], movesLeft - 1, self.CHANGE)if lastAction != self.CHANGE and lastAction != self.REMOVE: suggestions += next.recommend(query, movesLeft - 1, self.ADD)if lastAction != self.ADD and lastAction != self.CHANGE: if length > 1 and next.charIs(query[1]):suggestions += next.recommend(query[2:], movesLeft - 1, self.REMOVE) elif length > 2 and next.charIs(query[2]) and movesLeft == 2:suggestions += next.recommend(query[3:], movesLeft - 2, self.REMOVE)else: if lastAction != self.CHANGE and lastAction != self.REMOVE:suggestions += next.recommend(query, movesLeft - 1, self.ADD)return suggestionsdef buildTrieFromFile(): trie = Trie() rows = [(’中海晉西園’, 2),(’中海西園’, 24),(’中南海’, 4)] for row in rows:trie.insert(row[0], int(row[1])) return triedef suggestor(trie, s, maxDistance): if ’ ’ in s:s = [x for x in s.split(’ ’)] suggestions = trie.findAll(s, maxDistance) return [str(x.word) for x in suggestions]if __name__ == '__main__': trie = buildTrieFromFile() r = suggestor(trie, ’中海晉西園’, 1) print(r)

分析

結果打印:[’中海晉西園’, ’中海西園’]

可以看出“中海晉西園”是和輸入完全相同的字符串,編輯距離為 0 ,所以符合最大編輯距離為 1 的要求,直接返回。

“中海西園”是“中海晉西園”去掉“晉”字之后的結果,編輯距離為 1, 所以符合最大編輯距離為 1 的要求,直接返回。

另外,“中南海”和“中海晉西園”的編輯距離為 4 ,不符合最大編輯距離為 1 的要求,所以結果中沒有出現。

參考

https://github.com/leoRoss/AutoCorrectTrie

到此這篇關于Python容錯的前綴樹實現中文糾錯的文章就介紹到這了,更多相關Python 中文糾錯內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 男女国产视频 | 毛片视频网站在线观看 | 国产好片无限资源 | 综合欧美视频一区二区三区 | 久久精品国产亚洲麻豆 | 毛片免费视频观看 | 日韩在线精品视频 | 国产免费一级精品视频 | 亚洲国产精品专区 | 免费一级毛片在线播放放视频 | 久久久久久综合对白国产 | 亚洲成a v人片在线观看 | 亚洲精品一区二区三区四 | 免费看美女午夜大片 | 国产大乳喷奶水在线看 | 亚洲国产成人在人网站天堂 | 国产自在自线午夜精品 | 亚洲国产精品成 | 亚洲韩国欧美一区二区三区 | 成年女人黄小视频 | 精品国产中文一级毛片在线看 | 毛色毛片免费看 | 另类专区另类专区亚洲 | 高清国产美女一级a毛片 | 久青草国产在线 | 91精品国产综合久久青草 | 亚洲性欧美 | 在线观看亚洲成人 | 一级aaaaaa毛片免费同男同女 | 日本成a人片在线观看网址 日本成年人视频网站 | 亚洲天堂最新网址 | 依人九九 | 国产一级在线观看视频 | 日本一区二区高清不卡 | 国产精品午夜免费观看网站 | 久久久精品视频免费观看 | 欧美国产综合在线 | 成年网在线观看免费观看网址 | 久久黄色影片 | 久久久亚洲国产精品主播 | 久久福利资源站免费观看i 久久高清精品 |