一種基于相似度計算方法的數(shù)據(jù)排列方法
【專利摘要】本發(fā)明公開了一種基于相似度計算方法的數(shù)據(jù)排列方法,屬于數(shù)據(jù)處理領(lǐng)域。該方法包括以下具體步驟:(1)設置數(shù)據(jù)相似度的計算依據(jù);(2)加載計算相似度的數(shù)據(jù);(3)依據(jù)相似度設置,計算相似數(shù)據(jù)的過程;(4)展示相似數(shù)據(jù)的計算結(jié)果。與現(xiàn)有技術(shù)相比,本發(fā)明的基于相似度計算方法的數(shù)據(jù)排列方法通過操作者的操作設置數(shù)據(jù)相似度計算依據(jù)、通過計算實現(xiàn)按照相似程度排列數(shù)據(jù),可將數(shù)據(jù)按照相似度排列,并將相似程度高的數(shù)據(jù)自動標識,具有很好的推廣應用價值。
【專利說明】一種基于相似度計算方法的數(shù)據(jù)排列方法
[0001]
【技術(shù)領(lǐng)域】
[0002]本發(fā)明涉及一種數(shù)據(jù)排列方法,具體地說是一種基于相似度計算方法的數(shù)據(jù)排列方法。
【背景技術(shù)】
[0003]隨著信息技術(shù)的發(fā)展,企業(yè)中形成了各類的數(shù)據(jù)信息,這些數(shù)據(jù)信息中可能存在重復。對可能存在的重復數(shù)據(jù)進行加工處理、直觀的展現(xiàn),查找出正確數(shù)據(jù)信息已經(jīng)成為ERP軟件的必備功能。然而,對于并非完全重復的相似數(shù)據(jù),現(xiàn)有軟件難以實現(xiàn)規(guī)則排序,無法切實滿足企業(yè)清洗重復數(shù)據(jù)、獲取正確數(shù)據(jù)信息的需要。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的技術(shù)任務是針對上述現(xiàn)有技術(shù)的不足,提供一種基于相似度計算方法的數(shù)據(jù)排列方法。
[0005]本發(fā)明的技術(shù)任務是按以下方式實現(xiàn)的:一種基于相似度計算方法的數(shù)據(jù)排列方法,包括以下具體步驟:
(O設置數(shù)據(jù)相似度的計算依據(jù)
從預制數(shù)據(jù)表中選擇參與計算的字段內(nèi)容,即選擇數(shù)據(jù)表中的字段作為相似度計算的范圍,并設置每一字段的相似度計算權(quán)重;
(2)加載計算相似度的數(shù)據(jù)
(3)依據(jù)相似度設置,計算相似數(shù)據(jù)的過程
對已加載的數(shù)據(jù),采用相似度計算算法,計算數(shù)據(jù)的相似度值;
(4)展示相似數(shù)據(jù)的計算結(jié)果
按數(shù)據(jù)相似度計算結(jié)果進行數(shù)據(jù)分組、降序排列,并自動標識每組數(shù)據(jù)中最大相似度值的數(shù)據(jù)。
[0006]步驟(I)中,預制數(shù)據(jù)表的數(shù)據(jù)結(jié)構(gòu)包括字段所屬表名、字段名稱、字段長度、是否主鍵、外關(guān)聯(lián)表及其外鍵字段名稱;
預制數(shù)據(jù)表的表結(jié)構(gòu)包括:參與計算的表名稱、字段名稱、權(quán)重占比。數(shù)據(jù)相似度計算字段必須存在于上述預制數(shù)據(jù)表中。
[0007]步驟(2 )加載數(shù)據(jù)時,分頁加載參與相似度計算的數(shù)據(jù),并制定每頁加載數(shù)據(jù)的數(shù)目,即采用可選擇的分頁方式,分次加載參與計算的數(shù)據(jù)。數(shù)據(jù)加載后,可通過操作調(diào)整每頁顯示數(shù)據(jù)的數(shù)目量,并根據(jù)調(diào)整結(jié)果重新顯示數(shù)據(jù)。設置計算數(shù)據(jù)的頁數(shù),可針對具體一頁數(shù)據(jù)或制定的多頁數(shù)據(jù)進行數(shù)據(jù)計算。
[0008]步驟(3)中所述計算算法優(yōu)選為編輯距離法。
[0009]本發(fā)明的基于相似度計算方法的數(shù)據(jù)排列方法與現(xiàn)有技術(shù)相比具有以下突出的有益效果:
(一)面向ERP軟件開發(fā)人員、軟件操作人員提供了方便易用的重復數(shù)據(jù)的分組排列方法,滿足不同數(shù)據(jù)表的數(shù)據(jù)重復性識別需求,并將數(shù)據(jù)按照相似度排序、標識;
(二)支持ERP軟件中的字典、單據(jù)等多種數(shù)據(jù)表,具有良好的擴展性;
(三)有效的提高了軟件對重復數(shù)據(jù)分析過濾的能力,可以促進最終用戶更加有效的檢索出準確數(shù)據(jù),靈活易用的操作模式,更有效的促進了用戶對軟件的使用,滿足企業(yè)清洗重復數(shù)據(jù)、獲取正確數(shù)據(jù)信息的需要,具有良好的應用前景。
【專利附圖】
【附圖說明】
[0010]附圖1是本發(fā)明基于相似度計算方法的數(shù)據(jù)排列方法的相似度計算流程圖;
附圖2是實施例相似數(shù)據(jù)展示結(jié)果表圖例。
【具體實施方式】
[0011]參照說明書附圖以具體實施例對本發(fā)明的基于相似度計算方法的數(shù)據(jù)排列方法作以下詳細地說明。
[0012]實施例:
如附圖1所示,本發(fā)明的基于相似度計算方法的數(shù)據(jù)排列方法,其實現(xiàn)過程包括以下步驟:
1.設置數(shù)據(jù)的相似度計算依據(jù)
a)選擇參與相似度計算的數(shù)據(jù)字典的字段范圍,并設置計算權(quán)重。比如ERP系統(tǒng)中的“物料”字典,將“物料名稱”、“規(guī)格型號”設置為數(shù)據(jù)的相似度計算依據(jù),并分別設置權(quán)重;
b)采用算法:編輯距離法。
[0013]2.加載計算相似度的數(shù)據(jù)
a)設置加載數(shù)據(jù)的數(shù)目,控制數(shù)據(jù)的一次加載和展示數(shù)量;
b)采用數(shù)據(jù)加載組件,加載參與相似度計算的數(shù)據(jù),并采用列表形式展示加載數(shù)據(jù)。
[0014]3.依據(jù)相似度設置,計算相似數(shù)據(jù)的過程。
[0015]a)采用“編輯距離法”計算數(shù)據(jù)的相似度; b)依據(jù)數(shù)據(jù)相似度,形成數(shù)據(jù)的分組。
[0016]c)調(diào)用方法如下:
#reg1n相似度計算過程
decimal vdXSD = Convert.ToDecimal(txtXSD.Text);
string vsSortID = 〃〃;//標識相似記錄的序號
string vsColName = 〃〃;
decimal vdQZvalue = 0;
decimal vdSimiIarSum = 0; //兩行各個字段的相似度之和 decimal vdSimilar = 0; //兩行單個字段的相似度 string vsColStrA = 〃〃; string vsColStrB = 〃〃; int viprogress = 0;
string vsSort = vsWashColStr;
dtData.DefaultView.Sort = vsSort; //根據(jù)相似度規(guī)則的字段對待處理數(shù)據(jù)進行排序
if (dtWashingData == null)
{
dtWashingData = dtData.DefaultView.ToTable () ; // 正在處理的表
}
else
{
dtWashingData.Merge (dtData.DefaultView.ToTable (), true) ; // 將下一頁數(shù)據(jù)累加到上一頁處理時剩余的已經(jīng)處理完畢的數(shù)據(jù)中
}
dtWashedData = dtData.Clone O ; //將排序后的數(shù)據(jù)放到數(shù)據(jù)處理表中DataTable dtWashingData—NextPage = dtWashingData.Clone O ; //將下一頁的已經(jīng)處理過的數(shù)據(jù)先存儲在這個表中//開始對數(shù)據(jù)表的數(shù)據(jù)進行計算int viRowCount = O;
if (BaseMgr—Second.PageSize < dtWashingData.Rows.Count)
{
viRowCount = BaseMgr_Second.PageSize;
}
else
{
viRowCount = dtWashingData.Rows.Count;
}
for (int i = 0; i < viRowCount; i++) //逐頁進行相似度計算
{
if (i == viRowCount -1)
{
viprogress = 100;
}
else
{
viprogress = 100 * (i + I) / BaseMgr—Second.PageSize; //當前計算進度
}
lblprogress.Text = 〃正在計算第【〃 + piPageCurrent + 〃】頁,計算記錄數(shù):〃 +(i + I).ToStringO + 〃/"〃 + viRowCount.ToStringO ;lblprogress.Refresh ();
DataRow vRowA = dtWashingData.Rows[i];if (vRowA == null)
{
progressBar_sjqx.Value = viprogress;continue;
}
for (int j = i + I; j < i + pIBJFW -1 && j < dtWashingData.Rows.Count; j++)
{
//開始計算相鄰兩行的相似度vdSimiIarSum = O;
vsSortID = vRowA["SortID"].ToStringO ;
DataRow vRowB = dtWashingData.Rows[j];
foreach (DataRowView vRowView in dtQxgz.DefaultView)
{
vsColName = vRowView ["MDMQXGZ—COLBH"].ToString ().TrimO ;vdQZvalue = Convert.ToDecimal(vRowView["MDMQXGZ—QZ"]);if (vdQZvalue <= 0) continue;vdQZvalue = vdQZvalue / 100; //換算成百分數(shù)vsColStrA = vRowA [vsColName].ToString ().Trim();vsColStrB = vRowB [vsColName].ToString ().Trim();if (vsColStrA != "" && vsColStrB !="")
{
vdSimilar = MDMSjzhFunct1n.ComputeSimilar(vsColStrA, vsColStrB);
}
else
{
vdSimilar = 0;
}
vdSimiIarSum = vdSimiIarSum + vdSimilar * vdQZvalue;
}
if (vdSimiIarSum * 100 >= vdXSD)
{
if (vsSortID.TrimO == 〃〃 I I vsSortID.TrimO == 〃0〃)
{
isMaxSortID = Convert.ToString(Convert.ToInt64(isMaxSortID) + I);
vsSortID = isMaxSortID;
vRowA["SortID"] = vsSortID;
vRowB["SortID"] = vsSortID;
}
else
{
vRowB["SortID"] = vsSortID;
}
}
}
dtWashedData.1mportRow (vRowA) ; //將處理后的數(shù)據(jù)行放到新表中 progressBar_sjqx.Value = viprogress;
}
#endreg1n處理過程 4.展示相似數(shù)據(jù)的計算結(jié)果。
[0017]a) 按數(shù)據(jù)相似度計算分組結(jié)果排序,并對各組數(shù)據(jù)分別釆用不同顏色展示。
[0018]b) 自動標識每組數(shù)據(jù)中最大相似度值的數(shù)據(jù)。
[0019]c) 調(diào)用方法如下:
//加載數(shù)據(jù)
dsData = MDMDataWashIM(isWashedFiIePathj BaseMgr—Third.PageCurrent);
if (dsData == null)
{
dsData = dsDataClone;
}
if (dsData != null)
{
dsData.Tables[0].DefaultView.RowFilter = ^PageIndex = 〃 +BaseMgr_Third.PageCurrent + 〃〃;
gridSeIectDataList.DataSource = dsData.Tables [0].DefaultView;
Rad1ClickO ;
SetDefaultSelectData();
}
//設置相似數(shù)據(jù)的背景顏色
private void gridViewSelectDataList_RowStyle(object sender,DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e)
{
DevExpress.XtraGrid.Views.Grid.GridView view = sender asDevExpress.XtraGrid.Views.Grid.GridView;
if (e.RowHandle >= 0)
{
string vsSortID = view.GetRowCellDisplayText(e.RowHandlejview.Columns[〃SortID〃]);
if (vsSortID.TrimO == 〃0〃 || vsSortID.TrimO == 〃〃)
{
e.Appearance.BackColor = Color.White;
}
else
{
if (Convert.ToInt64(vsSortID) % 2 == 0)
{
e.Appearance.BackColor = System.Drawing.Color.FromArgb (((int) (((byte) (255)))), ((int) (((byte) (192)))), ((int) (((byte)(192)))));
}
else
{
e.Appearance.BackColor = System.Drawing.Color.FromArgb (((int) (((byte) (192)))), ((int) (((byte) (192)))), ((int) (((byte)(255)))));
}
}
}
}
相似數(shù)據(jù)計算結(jié)果的展示如附圖2所示。
【權(quán)利要求】
1.一種基于相似度計算方法的數(shù)據(jù)排列方法,其特征在于包括以下具體步驟: (1)設置數(shù)據(jù)相似度的計算依據(jù) 從預制數(shù)據(jù)表中選擇參與計算的字段內(nèi)容,并設置每一字段的相似度計算權(quán)重; (2)加載計算相似度的數(shù)據(jù) (3)依據(jù)相似度設置,計算相似數(shù)據(jù)的過程 對已加載的數(shù)據(jù),采用相似度計算算法,計算數(shù)據(jù)的相似度值; (4)展示相似數(shù)據(jù)的計算結(jié)果 按數(shù)據(jù)相似度計算結(jié)果進行數(shù)據(jù)分組、降序排列,并自動標識每組數(shù)據(jù)中最大相似度值的數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的基于相似度計算方法的數(shù)據(jù)排列方法,其特征在于步驟(I)中,預制數(shù)據(jù)表的數(shù)據(jù)結(jié)構(gòu)包括字段所屬表名、字段名稱、字段長度、是否主鍵、外關(guān)聯(lián)表及其外鍵字段名稱; 預制數(shù)據(jù)表的表結(jié)構(gòu)包括:參與計算的表名稱、字段名稱、權(quán)重占比。
3.根據(jù)權(quán)利要求1所述的基于相似度計算方法的數(shù)據(jù)排列方法,其特征在于步驟(2)加載數(shù)據(jù)時,分頁加載參與相似度計算的數(shù)據(jù),并制定每頁加載數(shù)據(jù)的數(shù)目。
4.根據(jù)權(quán)利要求1所述的基于相似度計算方法的數(shù)據(jù)排列方法,其特征在于步驟(3)中所述計算算法為編輯距離法。
【文檔編號】G06F17/30GK104331479SQ201410621947
【公開日】2015年2月4日 申請日期:2014年11月7日 優(yōu)先權(quán)日:2014年11月7日
【發(fā)明者】王小明, 陳永 申請人:浪潮通用軟件有限公司