2012-01-09 116 views
1

我有一個xml有兩個屬性:單詞和鏈接。 如何使用xml信息將文本上的單詞替換爲鏈接。 例: XML如何將單詞轉換爲鏈接?

<word>dog</word> 
<link>http://www.dog.com</link> 

文本:狗是很好的。

結果:dog很不錯。

結果OK。

的問題:

1-如果文本有言結果是因爲「S」 incorret。

2-我測試過在文本上用空格分隔來修復它,但是如果這個詞的構成像新年那麼結果會再次發生。

有沒有人有任何建議來解決這些問題(複數和複合詞)?

感謝您的幫助。

+2

你想匹配狗,還是不?如果是的話,你就會陷入很大的麻煩,因爲你很快就會發現單數和複數形式只是開始......然而,你能解釋一下你當前的實現嗎?你嘗試使用正則表達式匹配嗎? – Eilistraee 2012-01-09 19:54:02

回答

-1

您可能需要一本詞典。創建一個包含單詞和複數形式的文本文件/ XML文件。在運行時,將它們加載到Dictionary<String, String>。然後在字典中查找<word/>的值並提取其奇異值。

3

您可以使用Lucene.Net的了contrib包Snowball的詞幹(words - >wordcame - >comehaving - >have等)。但是,你仍然有複合詞

0

如果推出自己的解決方案的煩惱,我曾與.NET多元化功能良好的成功:

http://msdn.microsoft.com/en-us/library/system.data.entity.design.pluralizationservices.pluralizationservice.aspx

本質上講,你可以通過文字的複數形式並接收單數版本,反之亦然。

這取決於內容改變的頻率,這可能相當密集,即,這對於實時搜索數千個單詞不是好的選擇。

假設你可以預先處理/緩存結果或源文件小,你可以:

運行一次

  • 從源文件確定所有候選詞。

  • 解析/分割短語並將它們傳遞給多元化庫以確定它們的複數對應詞。

  • 生成(和預編譯)簡單的正則表達式以找到您要做的想要匹配的單詞。例如,如果你想匹配「狗」而不是「狗」,你可以創建一個像dog[^s]這樣的正則表達式,然後可以對該文本執行該正則表達式。

運行每當一個查找/替換爲所需

  • 運行你對討論的文字表述源的列表。我建議將表達式從最短到最長(否則短的表達式可能會替換剛剛被較長表達式解析的單詞)。

同樣,這將是處理器密集型實時運行(大多數解決方案)。與往常一樣,如果您解析HTML,則應該使用HTML解析器,而不是正則表達式。在這種情況下,您可以使用合適的解析器來查找所有文本節點,然後對其執行搜索/替換。

另一種解決辦法是把文字和關鍵字清單到數據庫,並使用SQL Server全文索引這往往是非常聰明的這些事情,支持智能匹配謂詞。你甚至可以將它與CLR存儲過程結合起來,以處理.NET擅長的事情(如字符串解析)。

無論採用哪種方法,這都不是一門精確的科學。

+0

除了如何提高搜索速度外,你不會說任何關於詞幹的東西。 gone->去,基準 - >標準,did->做等 – 2012-01-09 22:28:31

+0

@ L.B - 你是正確的,OP問多元化與複合詞...什麼更重要的是,需要一個相當複雜的解決方案。我簡單地看了一下你連接的產品,並提出了你的答案。 – 2012-01-09 22:33:20