我已經使用三元搜索樹進行了拼寫檢查代碼。任何人都可以告訴我如何在TST中找到下一個可能的單詞。 例如,如果我想搜索如果我在拼寫檢查器中搜索單詞「Manly」並且該單詞不存在於TST中,則其輸出如 您的意思是: 「Man」 「Mango」 。 .means可能接近單詞拼寫檢查器:三元搜索樹
回答
搜索TST中的單詞將終止在樹中的特定位置。從這一點上,你可以簡單地上升到樹中的一個層次,直到你達到不僅僅是你來自的孩子的水平。
在該級別上,您可以簡單地選擇其他可能的路徑並返回這些單詞。
我已經實現了自己的拼寫檢查程序,但是我使用的是三元dag,而不是簡單的三元樹,因爲Peter Kankowski建議here。你可以看看我的blog的一些細節,以及我是如何做到的。它在希臘文,但你可以得到一個想法。
編輯:
好吧,你是對的。 基本的想法是使用給定編輯距離的預先創建的候選列表(對於我來說值爲2是可以的)。爲了減少列表的大小,可以使用通配符。 這樣的列表當然可以用不同的方式構建。我更喜歡/ while循環是這樣的(例如,用於兩個換人的人選)
void Substitute2(vector<wchar_t*>& v, const wstring& w)
{
size_t len = w.size();
if (len < 2)
return;
size_t p1 = 0, p2 = 1;
while (p1 < len) {
p2 = p1 + 1;
while (p2 < len) {
wchar_t* chars = new wchar_t[ len + 1 ];
for (size_t i = 0; i < len; ++i) {
if (i != p1 && i != p2) {
chars[ i ] = w[ i ];
}
}
chars[ p1 ] = '?';
chars[ p2 ] = '?';
chars[ len ] = '\0';
v.push_back(chars);
p2++;
}
p1++;
}
}
已經準備的候選人名單,在三元DAG簡單的搜索列表中的每個項目將給予我們的建議後拼寫錯誤的單詞。
void Search(FileNode* pDict, FileNode* pNode, const wchar_t* Word, wstring Sug, set<wstring>& List)
{
if (IsNullLink(pNode, pDict))
return;
if (*Word == '?') {
Search(pDict, GetLo(pNode, pDict), Word, Sug, List);
Search(pDict, GetEq(pNode, pDict), Word + 1, Sug + pNode->Char, List);
Search(pDict, GetHi(pNode, pDict), Word, Sug, List);
} else {
if (*Word < pNode->Char) {
Search(pDict, GetLo(pNode, pDict), Word, Sug, List);
} else if (*Word > pNode->Char) {
Search(pDict, GetHi(pNode, pDict), Word, Sug, List);
} else {
if (pNode->Char == '\0')
{
List.insert(Sug);
}
if (*Word != '\0') {
Search(pDict, GetEq(pNode, pDict), Word + 1, Sug + pNode->Char, List);
}
}
}
}
注:字典是一個編譯(基於文件)三元DAG
這很好,很多東西需要學習,你使用的是哪個編譯器話。和Ternary dag很安靜有趣,你有沒有在你的博客上分享你的代碼。 – 2015-06-20 13:07:51
代碼中最重要的部分是公開可用的。 我正在使用微軟的VS 2012編譯器。 – rit 2015-06-20 13:38:50
對不起,但只有鏈接的答案在Stackoverflow上不好。請在您的答案中包含代碼。或者僞代碼和方案,如果這足以解釋算法。 – 2015-06-20 14:48:21
- 1. Python拼寫檢查器線性搜索
- 2. 三元搜索樹
- 3. 不GAE搜索API做拼寫檢查
- 4. 二進制搜索Python拼寫檢查
- 5. Solr構面搜索 - 拼寫檢查
- 6. 拼寫檢查器
- 7. 在ASP.NET中搜索的拼寫檢查器
- 8. 基於二進制搜索樹的平衡字符串(拼寫檢查)
- 9. emacs __approximate__拼寫檢查器
- 10. C#Lucene.Net拼寫檢查器
- 11. Python拼寫檢查器
- 12. 拼寫檢查器API
- 13. IE6的拼寫檢查器?
- 14. Silverlight拼寫檢查器
- 15. Python的拼寫檢查器
- 16. NetSpell拼寫檢查器
- 17. 拼寫檢查
- 18. 大小寫不敏感的三元搜索樹
- 19. 拼寫檢查器有什麼好處? Google拼寫檢查器或Hunspell
- 20. 帶服務器和拼寫檢查器的RESTful NoSQL搜索引擎?
- 21. 用於拼寫檢查的Google自定義搜索API
- 22. Solr拼寫檢查問題的搜索正確的單詞
- 23. Solr拼寫檢查/建議和模糊搜索v4.8.1
- 24. 拼寫檢查或搜索最適合的單詞/短語?
- 25. mongodb全文搜索,有拼寫檢查還是實現方法?
- 26. Java - binarySearch()。如何爲拼寫檢查設置二進制搜索
- 27. Google自定義搜索自動拼寫檢查
- 28. 拼寫檢查和搜索Solr請求是否可行?
- 29. 搜索沒有拼寫檢查WP8.0的文本框
- 30. 使用二進制搜索進行拼寫檢查
有三個三分球TST..left,平等和權利,如果這個詞是不是爲搜索它進入一個字匹配如同在BST中一樣,如何實現可以澄清更多 – 2015-03-19 13:11:25
在包含字符串的TST中搜索可以跟蹤其路徑(除非您只想知道您的字符串是否包含在TST中)。如果你跟蹤你的路徑,那麼你有4個選擇:左,平等,正確和上升(去你來自哪裏)。這就是我說的'在樹上升一層'所指的。 – 2015-03-19 13:20:47
你能否請你在我的大學項目中急需修改代碼http://www.geeksforgeeks.org/ternary-search-tree/ – 2015-03-19 15:10:58