《招标投标法實施條例》第四十條 有(yǒu)下列情形之一的(de),視爲投标人(rén)相(xiàng)互串通投标:……(四)不同投标人(rén)的(de)投标文(wén)件(jiàn)異常一緻或者投标報價呈規律性差異……在審計(jì)實務中,通過檢查各家投标文(wén)件(jiàn)的(de)技術(shù)标中的(de)文(wén)字是否存在大(dà)段重複,特别是異常一緻現象是檢測圍标串标的(de)一個(gè)重要方法。但(dàn)是,采用(yòng)傳統的(de)人(rén)工(gōng)篩選比較費時費力,且效果受限于檢測人(rén)員能(néng)力和(hé)水(shuǐ)平。
K-gram算法是一種用(yòng)于文(wén)本分(fēn)析的(de)大(dà)數據分(fēn)析方法,基于此方法,可(kě)以對投标人(rén)提供的(de)電子文(wén)件(jiàn)進行(xíng)對比,發現各投标文(wén)件(jiàn)中的(de)重複文(wén)本。
通過下面的(de)例子對K-gram算法做一個(gè)簡單的(de)介紹。
如(rú)下兩句話(huà),假定連續8個(gè)字重複即判定存在重複(爲了便于說明(míng)所做的(de)假設,在實際工(gōng)作中可(kě)以根據實際情況選擇假定連續多少(shǎo)個(gè)字相(xiàng)同即判定存在重複。)
句一:探索利用(yòng)大(dà)數據識别圍标串标
句二:大(dà)數據識别圍标串标的(de)方法需要認真研究
上(shàng)面兩句話(huà)中,“大(dà)數據識别圍标串标”連續9個(gè)字重複。
1、将句子按照(zhào)每8個(gè)字滑移提取字符串,即k=8。
句一被轉化爲6個(gè)字符串集合{“探索利用(yòng)大(dà)數據識”,“索利用(yòng)大(dà)數據識别” ,“利用(yòng)大(dà)數據識别圍”, “用(yòng)大(dà)數據識别圍标”,“大(dà)數據識别圍标串”, “大(dà)數據識别圍标串”}。
句二被轉化爲11個(gè)字符串集合{“大(dà)數據識别圍标串”,“數據識别圍标串标” ,“據識别圍标串标的(de)” ,“識别圍标串标的(de)方” ,“别圍标串标的(de)方法” ,“圍标串标的(de)方法需” ,“标串标的(de)方法需要” ,“串标的(de)方法需要認” ,“标的(de)方法需要認真” ,“的(de)方法需要認真研”,“方法需要認真研究” }。
2、比較兩個(gè)字符串集合,存在2個(gè)重複元素{“大(dà)數據識别圍标串”,“數據識别圍标串标”} ,判定以上(shàng)兩句話(huà)存在連續8個(gè)字以上(shàng)的(de)重複。
假定在技術(shù)标中存在連續100個(gè)字重複,即判定其投标文(wén)件(jiàn)存在圍标串标嫌疑,利用(yòng)Python編程實現其算法。
k=100 #設定連續重複多少(shǎo)字存在圍标串标嫌疑
#獲取甲公司技術(shù)标字符串數據集合
with open(r"d:¥甲公司技術(shù)标.txt",'r',encoding='utf-8') as f:
text=f.read()
f.close()
n = len(list(text))
a=set()
if n < k:
print("文(wén)件(jiàn)太小(xiǎo),無法切分(fēn)")
else:
for i in range(n-k+1):
a.add(text[i:i+k-1])
#獲取乙公司技術(shù)标字符串數據集合
with'宋體'; font-size:12pt; font-weight:normal; text-decoration:none">with open(r"d:¥乙公司技術(shù)标.txt",'r',encoding='utf-8') as f:
&n; text=f.read()
f.close()
n = len(list(text))
b=set()
if n < k:
print("文(wén)件(jiàn)太小(xiǎo),無法切分(fēn)")
else:
for i in range(n-k+1):
b.add(text[i:i+k-1])
#查詢兩個(gè)公司投标文(wén)件(jiàn)存在重複的(de)地(dì)方及重複情況
ab=a&b
print(ab)
print(len(ab))
來源:審計(jì)工(gōng)作。