倒排计划

2024-05-04

倒排计划(通用6篇)

篇1:倒排计划

华电丹东金山热电厂2×300MW机组新建工程

编制单位:中铁十八局集团第六工程有限公司丹东金山热电厂项目部批

准:审

核:编

制:

工期施工日计划书

丹东金山电厂2X300MW新建工程

中铁十八局丹东金山电厂新建工程项目部一、八月施工完成情况(截止到8月14日,形象进度)

1、办公楼 1.1、办公楼5-10/E-G地下室库顶板钢筋绑扎完成90% 目前累计完成90% 1.2、办公楼1-5/A-G地下室顶板梁、板钢筋绑扎完成30% 目前累计完成30% 1.3、承重脚手架体安装100% 目前累计完成100%

2、化学预处理车间

2.1、污水池-0.030板、+0.100米设备基础浇筑完成100% 目前累计完成100% 2.2、①-⑦轴基础梁浇筑100% 目前累计完成100% 2.3、基础土方回填100% 目前累计完成100% 2.4、外脚手架体安装完成100% 目前累计完成100%

3、材料库 3.1、基础承台浇筑100% 目前累计完成100% 3.2、基础土方回填80% 目前累计完成80% 3.3、基础梁垫层施工完毕 目前累计完成100%

二、主要施工进度计划:如遇设计变更、阴雨天工期顺延

1、办公楼

8月15日 办公楼5-10/E-G地下室库顶板(-0.050米层)梁、板、框柱、构柱、梯钢筋绑扎完成100%→验收完成

化学车间水池框柱电渣压力焊连接完成;钢筋工进行框柱安装;材料库钢筋工绑扎基础梁绑扎完成; 办公楼1-5/A-G地下室顶板(-0.050米层)梁、板模板安装、梁、板、柱、梯钢筋安装 办公楼5-10/E-G轴,(-0.050米层)地下室库顶板进行混凝土浇筑(夜间)

丹东金山电厂2X300MW新建工程

中铁十八局丹东金山电厂新建工程项目部

8月16日 办公楼1-5/A-G地下室顶板(-0.050米层)梁、板模板安装;

化学预处理车间水池框柱钢筋安装完成; 材料库基础梁、管道竖井模板安装;

8月17日 办公楼1-5/A-G地下室顶板(-0.050米层)梁、板模板安装;

8月18日 8月19日

8月20日 办公楼5-10/E-G轴,+4.450米层承重脚手架体安装;

化学预处理车间水池框柱安装完成;

材料库基础梁模板安装完成→验收完成→浇筑混凝土;

办公楼1-5/A-G地下室顶板(-0.050米层)柱钢筋安装;

办公楼5-10/E-G轴,+4.450米层承重脚手架体安装;模板、钢筋开始安装

化学预处理车间B-D/1-7机械夯实回填土,框柱模板安装; 办公楼1-5/A-G地下室库顶板进行混凝土浇筑(夜间)

办公楼5-10/E-G轴+4.450米层承重脚手架安装,柱模板安装、钢筋安装;

办公楼1-5/A-G地下室顶板(-0.050米层)梁、板、柱、梯模板安装、钢筋安装→验收完成;

化学预处理车间+4.800米层框柱模板安装完成;±0.000米B-D/1-7机械夯实回填土;

材料库基础梁模板拆模完成→夯实回填土;电气水暖预埋管线,竖井、地沟模板安装完成并浇筑混凝土 办公楼1-5/A-G地下室库顶板(-0.050米层)进行混凝土浇筑(夜间)办公楼5-10/E-G轴+4.450米层承重脚手架安装完成,梁、板、构柱、框柱、梯模板安装、钢筋安装;

办公楼1-5/A-G轴,(+4.450米层)承重脚手架体开始安装; 化学预处理车间+3.200米层柱模板安装完成;钢筋开始梁安装; 化学预处理车间±0.000米B-D/1-7机械夯实回填土;

丹东金山电厂2X300MW新建工程

中铁十八局丹东金山电厂新建工程项目部

材料库基础河石回填,并进行机械碾压夯实回填土;电气水暖预埋管线

8月21日 办公楼5-10/E-G轴+4.450米层梁、板、构柱模板安装完成、钢筋安装完成→下午验收完成;

8月22日 8月23日 8月24日 8月25日 办公楼1-5/A-G轴,(+4.450米层)承重脚手架体安装; 化学预处理车间+4.800米层梁、板、柱钢筋安装;模板安装 化学预处理车间±0.000米B-D/1-7机械夯实回填土;

材料库基础河石回填,并进行机械碾压夯实回填土;地沟模板安装,电气水暖预埋管线完成; 办公楼5-10/E-G轴,(+4.450米层)梁、板、柱、梯进行混凝土浇筑(夜间)

办公楼1-5/A-G轴,(+4.450米层)承重脚手架体安装完成,梁、板、柱、梯模板开始安装

化学预处理车间+4.800米层钢筋安装完成→验收钢筋完成;模板安装,柱上埋件进行预埋; 化学预处理车间±0.000米B-D/1-7机械夯实回填土; 材料库基础进行机械碾压夯实回填土;

办公楼1-5/A-G轴,(+4.450米层)梁、板、柱、梯模板安装

化学预处理车间+4.800米层梁、板、柱模板全部安装完成,验收模板完成。柱上埋件预埋; 化学预处理车间±0.000米B-D/1-7机械夯实回填土并环刀取样完成; 材料库基础土方进行机械碾压夯实回填土;

办公楼1-5/A-G轴,(+4.450米层)梁、板、柱、梯模板安装

化学预处理车间+4.800米层梁、板、柱模板全部安装完成,验收模板完成,柱上埋件预埋完成并验收;

化学预处理车间+4.800米层梁、板、柱混凝土浇筑(夜间);

材料库基础土方进行机械碾压夯实回填土→环刀取样完成;竖井、地沟模板安装完成;

办公楼1-5/A-G轴,(+4.450米层)梁、板、柱、梯模板安装完成→验收完成;

丹东金山电厂2X300MW新建工程

中铁十八局丹东金山电厂新建工程项目部

化学预处理车间±0.000米B-D/1-7排水沟C10混凝土垫层施工;

材料库一层地面进行60厚C15混凝土垫层、竖井、地沟浇筑(测量跟踪抄平); 8月26日 办公楼1-5/A-G轴,(+4.450米层)梁、板、柱、梯钢筋安装;

8月27日 8月28日 8月29日 办公楼5-10/E-G地下室顶板(-0.050米层)梁、板、柱、梯模板拆除;承重脚手架体进行间隔拆除;办公楼5-10/E-G轴,(+8.300米层)承重脚手架体开始安装;

化学预处理车间±0.000米进行测量放线→下午验线完成;

材料库一层地面进行钢筋网片安装;夜间进行50厚C25混凝土面层浇筑(指派专人进行二次碾压); 办公楼1-5/A-G轴,(+4.450米层)梁、板、柱、梯钢筋安装完成→验收完成;(夜间)混凝土浇筑完成;办公楼5-10/E-G地下室顶板(-0.050米层)梁、板、柱、梯模板拆除;承重脚手架体进行间隔拆除; 办公楼(+8.300米层)承重脚手架安装;

化学预处理车间±0.000米进行设备基础、排水沟槽钢筋安装、模板安装;污水池顶板模板、脚手架拆除

材料库进行测量放线,下午承重脚手架进行安装;

办公楼5-10/E-G地下室顶板(-0.050米层)模板拆除完成;承重脚手架体进行间隔拆除完成;

办公楼(+8.300米层)承重脚手架安装;

化学预处理车间±0.000米进行设备基础、排水沟槽钢筋安装、模板安装完成→验收完成; 化学预处理车间污水池顶板模板、脚手架拆除; 材料库进行测量放线,下午承重脚手架进行安装;

办公楼5-10/E-G地下室顶板(-0.050米层)模板拆除完成;承重脚手架体进行间隔拆除完成;

办公楼(+8.300米层)5-10/E-G轴,承重脚手架体安装完成,梁、板、柱、梯模板安装; 化学车间±0.000米进行设备基础、排水沟槽、室外楼梯基础墩、混凝土浇筑完成;

化学预处理车间污水池顶板模板、脚手架拆除完成,污水池垃圾清理完成→防腐工作准备进场;

丹东金山电厂2X300MW新建工程

中铁十八局丹东金山电厂新建工程项目部

材料库承重脚手架进行安装;1-2/A-C轴脚手架安装完成

8月30日 办公楼(+8.300米层)5-10/E-G轴,梁、板、柱、梯模板安装;钢筋开始安装;

8月31日

9月1日

9月2日

9月3日 化学预处理车间±0.000米进行设备基础、排水沟槽、室外楼梯基础墩模板拆模; 化学预处理车间污水池聚脲防腐施工;

材料库承重脚手架进行安装; ++3.900米层1-2/A-C轴模板安装完成、钢筋安装;

办公楼(+8.300米层)5-10/E-G轴,梁、板、柱、梯模板安装;钢筋安装,1-5/A-G模板安装;

化学预处理车间1-7/B-D脚手架体安装,钢筋框柱安装;

化学预处理车间污水池聚脲防腐施工完成;外委方进行车间设备安装;

材料库承重脚手架安装; +3.900米层1-2/A-C轴钢筋安装完成→验收完成→浇筑混凝土

办公楼(+8.300米层)1-10/A-G梁、板、柱、梯模板安装,5-10/E-G轴钢筋模板安装完成→验收完成;

化学预处理车间1-7/B-D脚手架体安装,钢筋框柱安装完成; 化学预处理车间外委方进行车间设备安装,室内砌筑备料;

材料库+7.200米层承重脚手架1-8/A-C安装完成;

办公楼(+8.300米层)5-10/E-G轴进行混凝土浇筑(夜间); 办公楼(+8.300米层)1-5/A-G梁、板、柱、梯模板安装,钢筋安装;

办公楼(+12.200米层)5-10/E-G轴承重脚手架安装;

化学预处理车间+3.900米柱、梁模板、钢筋安装;室内砌筑备料完成,车间设备安装完成;

材料库+7.200米层模板安装

办公楼(+8.300米层)1-5/A-G梁、板、柱、梯模板安装,钢筋安装;

丹东金山电厂2X300MW新建工程

中铁十八局丹东金山电厂新建工程项目部

办公楼(+12.200米层)5-10/E-G轴承重脚手架安装;

化学预处理车间+3.600米柱、梁模板安装、钢筋安装;柱上埋件安装完成,电气预埋完成

材料库+7.200米层模板安装;室外楼梯基础墩、埋件预埋

9月4日 办公楼(+8.300米层)1-5/A-G梁、板、柱、梯模板安装,钢筋安装;

9月4日

9月5日

9月6日

9月7日 办公楼(+12.200米层)5-10/E-G轴承重脚手架安装完成;

化学预处理车间+3.600米柱、梁模板、钢筋安装完成→验收完成→浇筑混凝土(夜间); 材料库+7.200米层模板安装,钢筋安装,室外楼梯基础墩浇筑完成、楼梯埋件预埋

办公楼(+8.300米层)1-5/A-G梁、板、柱、梯模板钢筋安装完成→验收完成→浇筑混凝土(下午浇筑);

办公楼(+12.200米层)5-10/E-G轴模板安装; 化学预处理车间+3.600米层柱梁模板拆除

材料库室外楼梯埋件完成,+7.200米层模板安装,钢筋安装完成→验收完成→浇筑混凝土(夜间)办公楼(+12.200米层)5-10/E-G轴模板安装;钢筋下午安装;(+8.300米层)1-5/A-G砼板养生; 化学预处理车间室内砌筑,框柱进行电渣压力焊接完成; 材料库进行室外楼梯安装;+12.000米层测量放线;

办公楼(+12.200米层)5-10/E-G轴模板安装;钢筋安装;地下室砌体砌筑;

办公楼(+8.300米层)1-5/A-G梁柱模板拆除,(+12.200米层)1-5/A-G承重脚手架体安装;

化学预处理车间室内砌筑;钢筋安装;

材料库进行室外楼梯安装;+12.000米层测量放线完成,钢筋框柱安装;承重脚手架体安装; 办公楼(+12.200米层)5-10/E-G轴模板安装;钢筋安装;地下室砌体砌筑;

丹东金山电厂2X300MW新建工程

中铁十八局丹东金山电厂新建工程项目部

办公楼(+8.300米层)1-5/A-G梁柱模板拆除完成,(+12.200米层)1-5/A-G承重脚手架体安装;

化学预处理车间室内砌筑;+6.500米层钢筋安装;模板安装;梁上埋件安装

材料库进行室外楼梯安装;+12.000米层钢筋框柱安装;;模板安装;承重脚手架体安装; 9月8日 办公楼(+12.200米层)5-10/E-G轴模板安装完成;钢筋安装完成→验收完成;地下室砌体砌筑;

9月9日

9月10日

9月11日

办公楼(+12.200米层)1-5/A-G承重脚手架体安装;

化学预处理车间室内砌筑;+6.500米层钢筋安装;模板安装;梁上埋件安装完成; 材料库进行室外楼梯安装;承重脚手架体安装;

办公楼(+12.200米层)5-10/E-G轴梁、板、梯、柱进行混凝土浇筑(夜间)

办公楼(+12.200米层)5-10/E-G轴模板安装完成;钢筋安装完成→验收完成;地下室砌体砌筑完成;

办公楼(+12.200米层)1-5/A-G承重脚手架体安装完成→模板开始安装;

化学车间室内砌筑完成;钢筋模板安装完成→验收完成;夜间进行+6.500层框柱、梁混凝土浇筑; 材料库进行室外楼梯安装;承重脚手架体安装完成;

办公楼(+12.200米层)5-10/E-G轴梁、板、梯、柱进行混凝土浇筑(夜间)办公楼(+12.200米层)1-5/A-G轴模板安装完成;钢筋安装;一层砌体砌筑; 化学预处理车间室外楼梯安装;塑钢窗占框安装完成;+6.500米层混凝土养生; 材料库+12.000米层模板安装;

办公楼(+12.200米层)1-5/A-G轴模板安装;钢筋安装;一层砌体砌筑; 办公楼(+12.200米层)5-10/E-G轴模板拆除;混凝土养生;

化学预处理车间室外楼梯安装完成;+6.500层框柱、梁模板拆除完成;室内垃圾清理完成; 材料库+12.000米层模板安装;下午钢筋进行梁安装;

丹东金山电厂2X300MW新建工程

中铁十八局丹东金山电厂新建工程项目部

9月12日 办公楼(+12.200米层)1-5/A-G轴模板安装;钢筋安装;一层砌体砌筑;

办公楼(+12.200米层)5-10/E-G轴混凝土养生;

化学预处理车间塑钢窗发泡安装完成;柱、梁混凝土养生;室外台阶基础完成材料库+12.000米层模板安装;钢筋梁安装完成;

9月13日

9月14日

9月15日

9月16日

办公楼(+12.200米层)1-5/A-G轴模板安装;钢筋安装;一层砌体砌筑完成; 办公楼(+12.200米层)5-10/E-G轴进行梁帮、柱模板拆除;混凝土养生; 化学预处理车间塑钢窗安装完成;柱、梁混凝土养生;室外台阶完成;

材料库+12.000米层模板安装;钢筋安装完成→验收完成(下午)→浇筑混凝土(夜间)办公楼(+12.200米层)1-5/A-G轴模板安装;钢筋安装完成→验收完成→浇筑混凝土(夜间)办公楼(+12.200米层)5-10/E-G轴进行梁帮、柱模板拆除完毕;+16.200米层承重脚手架体安装;

化学预处理车间柱、梁混凝土养生;雨棚防水完成;办公楼室内二层砌体砌筑;

材料库+12.000米层模板拆除,钢筋压力焊连接,混凝土养生;测量放线完成;+3.600米层脚手架体拆除; 办公楼(+12.200米层)1-5/A-G轴模板安装;钢筋安装完成→验收完成(上午)→浇筑混凝土(夜间); 办公楼(+16.200米层)5-10/E-G轴承重脚手架体安装;办公楼室内二层砌体砌筑;

化学预处理车间柱、梁混凝土养生;屋面SPD板安装完成;

材料库+16.800米层承重脚手架安装,钢筋压力焊连接完成;+3.600米层脚手架体拆除; 办公楼(+12.200米层)1-5/A-G轴模板进行梁帮、柱模板拆除;混凝土养生; 办公楼(+16.200米层)5-10/E-G轴承重脚手架体安装;办公楼室内二层砌体砌筑;

化学预处理车间混凝土养生;屋面SPD板安装并进行焊接;木工支屋面SPD板缝吊盒;

材料库+16.800米层承重脚手架安装,钢筋安装;+3.600米层脚手架体拆除完成;

丹东金山电厂2X300MW新建工程

中铁十八局丹东金山电厂新建工程项目部

9月17日 办公楼(+12.200米层)1-5/A-G轴模板进行梁帮、柱模板拆除完成;混凝土养生;

办公楼(+16.200米层)5-10/E-G轴承重脚手架体安装;办公楼室内二层砌体砌筑;

9月18日

9月19日

9月20日

9月21日 化学预处理车间混凝土养生;屋面SPD板进行焊接;女儿墙模板安装、钢筋安装; 木工支屋面吊盒完成;钢筋工吊盒钢筋安装; 材料库+16.800米层承重脚手架安装,钢筋安装(柱筋安装完成);

办公楼(+16.200米层)1-5/A-G轴承重脚手架体安装;

办公楼(+16.200米层)5-10/E-G轴承重脚手架安装完成;模板开始安装;办公楼室内二层砌体砌筑完成;

化学预处理车间屋面SPD板进行焊接完成;木工支屋面吊盒完成;钢筋工吊盒钢筋安装完成→夜间浇筑;

材料库+16.800米层承重脚手架安装,钢筋安装(柱筋安装完成);

办公楼(+16.200米层)1-5/A-G轴承重脚手架体安装;办公楼室内三层砌体砌筑; 办公楼(+16.200米层)5-10/E-G轴承重脚手架体安装完成;模板开始安装;

化学预处理车间屋面板层钢筋安装;屋面吊盒拆除完成;

化学车间屋面女儿墙模板安装、钢筋安装完成→验收完成→浇筑混凝土(下午);

材料库+16.800米层承重脚手架安装;

办公楼(+16.200米层)1-5/A-G轴承重脚手架体安装;办公楼室内三层砌体砌筑; 办公楼(+16.200米层)5-10/E-G轴,模板安装,梁底模板安装完成;

化学预处理车间屋面60厚板钢筋安装→验收完成→浇筑混凝土(夜间);

材料库+16.800米层承重脚手架安装完成,模板安装、钢筋安装; 办公楼(+16.200米层)1-5/A-G轴承重脚手架体安装;办公楼室内三层砌体砌筑;

丹东金山电厂2X300MW新建工程

中铁十八局丹东金山电厂新建工程项目部

办公楼(+16.200米层)5-10/E-G轴,模板安装,钢筋梁安装;

化学预处理车间屋面保温层、找平层安装;

材料库+16.800米层梁、板、柱、梯、模板安装、钢筋安装;

9月22日 办公楼(+16.200米层)1-5/A-G轴承重脚手架体安装完成;模板安装、钢筋安装;

9月23日

9月24日

9月25日 办公楼(+16.200米层)5-10/E-G轴,模板安装,钢筋梁安装;办公楼室内三层砌体砌筑;

化学预处理车间屋面防水层安装完成→验收完成;

材料库+16.800米层梁、板、柱、梯、模板安装、钢筋安装;+7.200米层脚手架体拆除; 办公楼(+16.200米层)1-5/A-G轴模板安装、钢筋安装;办公楼室内三层砌体砌筑完成; 办公楼(+16.200米层)5-10/E-G轴,模板安装,钢筋梁安装完成→验收完成;

化学预处理车间屋面外爬梯涂料安装完成、排水管安装,屋面防水层安装完成

材料库+16.800米层梁、板、柱、梯、模板安装、钢筋安装;+7.200米层脚手架体拆除; 办公楼(+16.200米层)5-10/E-G轴进行混凝土浇筑(夜间);

办公楼(+16.200米层)1-5/A-G轴模板钢筋安装;办公楼(+16.200米层)5-10/E-G轴,模板局部拆除;

材料库、办公楼、化学车间全面进行三次室内保洁; 化学预处理车间排水管安装完成,屋面防水验收完成;

材料库+16.800米层梁、板、柱、梯、模板安装、钢筋安装完成;+7.200米层脚手架体拆除完成; 材料库+16.800米层梁、板、柱、梯进行混凝土浇筑(白天); 塑钢窗厂家对办公楼、材料库开始现场安装,发泡同时进行; 办公楼(+16.200米层)1-5/A-G轴模板钢筋安装;办公楼(+16.200米层)5-10/E-G轴,模板局部拆除;

丹东金山电厂2X300MW新建工程

中铁十八局丹东金山电厂新建工程项目部

办公楼地下室、一层后浇带C35混凝土浇筑;

材料库、办公楼、化学车间全面进行三次室内保洁;塑钢窗厂家对办公楼、材料库现场安装; 化学预处理车间电气、水暖、外委等单位进行相关管线、设备、箱体安装;

材料库+16.800米层梁、柱模板拆除、板面混凝土养护; 屋面女儿墙模板安装;一层砌筑备料; 9月26日

9月27日

9月28日

9月29日 办公楼(+16.200米层)1-5/A-G轴模板安装、钢筋安装;办公楼二层、三层后浇带C35混凝土浇筑;

办公楼(+16.200米层)5-10/E-G轴,模板局部拆除完成;坡道进行土方开挖;地下室排水沟模板安装;

材料库、办公楼、化学车间全面进行二次室内保洁;塑钢窗厂家对办公楼、材料库现场安装; 化学预处理车间电气、水暖、外委等单位进行相关管线、设备、箱体安装;

材料库+16.800米层梁、柱模板拆除完成、屋面女儿墙模板安装;钢筋安装;一层砌筑开始; 办公楼(+16.200米层)1-5/A-G轴模板钢筋安装完成→验收完成→浇筑混凝土(下午开始);

办公楼地下室外坡道土方开挖完成→测量放线;地下室排水沟模板安装;办公楼室内四层砌体砌筑; 材料库、办公楼、化学车间全面进行二次室内保洁;塑钢窗厂家对办公楼、材料库现场安装; 化学预处理车间电气、水暖、外委等单位进行相关管线、设备、箱体安装;

材料库+16.800米层梁、柱模板拆除完成、屋面+17.500层女儿墙模板安装完成;钢筋安装完成→验收完成;

办公楼室外坡道台阶散水土方开挖完成→测量验收→坡道垫层混凝土浇筑完成;地下室排水沟模板安装; 材料库、办公楼、化学车间全面进行二次室内保洁;塑钢窗厂家对办公楼、材料库现场安装;

化学预处理车间电气、水暖、外委等单位进行相关管线、设备、箱体安装;

材料库+16.800米层梁、柱模板拆除完成、屋面女儿墙模板安装完成;钢筋安装完成→验收完成 材料库+17.500米层女儿墙混凝土浇筑完成(白天);一层砌筑完成;办公楼室内四层砌体砌筑; 办公楼地下室外坡道防水安装;地下室排水沟模板安装,排水沟埋件完成→模板轴线验收;散水回填砂

丹东金山电厂2X300MW新建工程

中铁十八局丹东金山电厂新建工程项目部

塑钢窗厂家对办公楼、材料库现场安装塑窗框全部完成,进行双玻保温玻璃安装;

化学预处理车间电气、水暖、外委等单位进行相关管线、设备、箱体安装完成;

材料库+17.500米女儿墙模板拆模完成;屋面清理完成→找平层施工→头道防水层施工;二三层砌筑备料; 办公楼一层室内抹灰开始;四层砌体砌筑;材料库、办公楼、化学车间全面进行二次室内保洁完成;

9月30日 10月1日 10月2日

10月3日 办公楼地下室外坡道防水安装完成→水泥砂浆找平层施工;散水回填混砂→夯实;

办公楼地下室排水沟模板安装完成→模板轴线验收→浇筑300厚混凝土(夜间);

塑钢窗厂家对办公楼、材料库双玻保温玻璃安装;办公楼室内一层抹灰,四层砌体砌筑;

化学预处理车间内外墙装饰开始施工;

材料库屋面保温层安装→找平层安装完成;

二、三层砌筑开始;

办公楼地下室外坡道水泥砂浆找平层完成,墙体、坡道钢筋安装、模板安装;散水回填混砂→夯实完成;

室内抹灰一层完成,四层砌体砌筑完成;办公楼地下室浇筑300厚混凝土继续浇筑完成; 排水沟井篦子安装;办公楼室内四层砌体砌筑完成; 化学预处理车间内外墙装饰开始施工;

材料库屋面防水安装;室外台阶、散水、坡道、楼梯土方开挖完成;二三层砌筑;

办公楼地下室外坡道墙体、坡道钢筋安装、模板安装;

办公楼地下室排水沟井篦子安装;

办公楼四层后浇带C35混凝土浇筑;;四层卫生间、电梯井小型砌体砌筑;室内四层抹灰; 化学预处理车间内、外装饰施工;门窗安装;与外单位进行相关洽商并网和供暖相关事项;

材料库屋面防水层安装完成→屋面保护层完成;室外台阶、散水、坡道、楼梯安装;材料库二三层砌筑; 办公楼地下室外坡道墙体、坡道钢筋安装、模板安装;三层卫生间、电梯井小型砌体砌筑;室内四层抹灰;

丹东金山电厂2X300MW新建工程

中铁十八局丹东金山电厂新建工程项目部

10月4日

10月5日

10月6日 10月7日

10月8日 办公楼地下室排水沟井篦子安装;与装饰、消防、通风、电梯、外网等外围单位洽商协调; 化学预处理车间内、外装饰施工;门窗安装;水暖电气

材料库屋面防水层→保护层完成;室外台阶、散水、坡道、楼梯安装; 材料库三层砌筑完成,二层继续砌筑;室内三层抹灰开始;

办公楼地下室外坡道墙体、坡道钢筋安装、模板安装;二层卫生间、电梯井小型砌体砌筑;

室内四层抹灰;外墙抹灰(女儿墙)开始;地下室排水沟井篦子安装; 化学预处理车间内、外装饰施工;门窗安装;

材料库室外台阶、散水、坡道、楼梯安装;门窗安装;二层砌筑;室内三层抹灰; 办公楼地下室外坡道墙体、坡道钢筋安装、模板安装;一层卫生间、电梯井小型砌筑;

办公楼地下室排水沟井篦子安装;室内四层抹灰完成;外墙抹灰女儿墙; 化学预处理车间内、外装饰施工;门窗安装;

材料库防水层→屋面保护层完成;室外台阶、散水、坡道、楼梯安装;二层砌筑;三层抹灰均完成; 办公楼地下室外坡道墙体、坡道钢筋安装、模板安装完成→验收完成→进行C25P8混凝土浇筑(夜间);

办公楼室内三层抹灰完成;外墙抹灰造型、女儿墙完成;

化学预处理车间门窗安装完成;内、外装饰施工,水暖电气等相关设备竣工前测试完成;

材料库屋面防水层→保护层完成;室外台阶、散水、坡道、楼梯安装全部完成;一二层内外抹灰开始; 办公楼地下室外坡道墙体、坡道钢筋安装、模板安装完成→验收完成→进行混凝土浇筑(白天);

室内二层抹灰;外墙四层开始抹灰; 化学预处理车间门窗安装完成;

材料库屋面防水层安装完成→屋面保护层完成;

一、二层内外抹灰,室外散水土方开挖

办公楼地下室外坡道墙体模板拆除,室内二层抹灰;外墙四层开始抹灰;地下室外委安装;电梯进场安装;

丹东金山电厂2X300MW新建工程

中铁十八局丹东金山电厂新建工程项目部

化学预处理车间内、外装饰施工全部完成,清理现场,机械材料退场;

材料库一二层内外抹灰,室外散水土方开挖;吊装孔栏杆安装;

10月9日 办公楼地下室外坡道墙体模板拆除完成,室内二层抹灰完成;外墙三层,内墙一层抹灰开始;

化学预处理车间清理现场,机械材料退场完成;

材料库一二层内外抹灰,室外散水施工;吊装孔栏杆安装;

10月10日 办公楼室内一层抹灰;外墙三层抹灰;地下室外委安装;门窗安装;化学预处理车间竣工验收;

材料库一二层内外抹灰完成,室外散水施工完成;吊装孔栏杆安装完成;

10月11日 办公楼室内一层抹灰完成;外墙三层抹灰完成;地下室安装完成;门窗安装;材料库竣工验收; 10月12日 办公楼外墙二层抹灰;外保温材料进场并进行技术交底; 10月13日 办公楼外墙二层抹灰;外墙保温安装; 10月14日 办公楼外墙二层抹灰完成;外墙保温安装; 10月15日 办公楼外墙一层抹灰开始;外墙保温安装; 10月16日 办公楼外墙一层抹灰;外墙保温安装;

10月17日 办公楼外墙一层抹灰;外墙保温安装;室外散水施工; 10月18日 办公楼外墙一层抹灰完成;外墙保温安装;室外散水安装完成 10月19------28日 办公楼外墙保温安装完成;外墙涂料进场施工; 10月28------11月4日 办公楼外墙涂料安装完成;机械材料设备退场完成; 11月5日

办公楼竣工验收;

篇2:倒排计划

河道桩号3+000~3+336段土方开挖(336m):2013.4.1~2013.9.22 河道桩号2+809~3+000段土方开挖(191m):2013.9.23~2013.10.7 全段土方保护层开挖(527m):2013.10.8~2013.10.27

全段防水毯铺设(527m):2013.10.28~2013.11.26

全段土方回填(527m):2013.11.3~2013.12.15

全段底板互锁砌块及混凝土底板护角施工(527m):2013.11.19~2013.12.20 全段边坡土工布铺设施工(527m):2013.11.22~2013.12.8

全段边坡互锁砌块安装施工(527m):2013.12.6~2014.1.6

河道桩号2+325~2+809段施工

河道桩号2+600~0+809段土方开挖(209m):2013.10.8~2013.10.29 河道桩号2+325~2+600段土方开挖(275m):2013.10.30~2013.11.15 全段土方保护层开挖(484m):2013.11.16~2013.12.6

全段防水毯铺设(484m):2013.12.7~2014.1.7

全段土方回填(484m):2013.12.14~2014.1.19

全段浆砌石砌筑(484):2013.12.25~2014.1.31

全段底板互锁砌块及混凝土底板护角施工(484m):2014.1.14~2014.2.15 全段坡改平施工(484m):2014.1.22~2014.2.21

雨水口施工:2014.2.16~2013.3.26

篇3:基于倒排索引的DNF算法改进

自1994年Wired杂志网络版Hotwired主页开始刊登广告以来[1], 在线广告便支撑着互联网行业的大半壁江山。美国互动广告局 (IAB) 《2012年年度报告》显示, 2012年全球网络广告市场规模达到885.7亿美元。艾瑞咨询《2012-2013年中国网络广告行业年度监测报告》显示, 2012年中国整体网络广告市场规模达到753.1亿元, 并预期2013年或将超过千亿级别。

互联网广告产生以来, 运营者们不断改进着在线广告的产品形态。随着媒体流量及广告品牌认知度的相对稳定, 催生了在线广告效果和市场规模不断发展的核心驱动力, 即针对不同的受众呈现不同的广告创意。2008年Andrei Broder首次提出了计算广告的课题, 并指出计算广告是综合了大规模搜索、文本分析、信息检索、统计模型、机器学习、分类、最优化、微观经济学、推荐系统等多个方向的交叉新兴学科, 其核心挑战是解决用户、上下文与广告的“最佳匹配问题”。自此以后, 计算广告中的许多技术、算法等问题都得到了学术界的广泛关注及深入研究。

1 布尔表达式检索算法

竞价广告市场中, 大量中小广告主的参与, 以及复杂的定向条件, 对检索技术提出了更高的要求。倒排索引是搜索引擎的关键技术, 而广告检索也可以采用这样的框架, 再依据其自身的特点及需求加以修改。在受众定向的售卖方式下, 一条广告对象不能再被看成Bo W (bag of words) 的形式, 即对于一篇文档忽略它的单词顺序、语法及句法等要素, 将其仅仅看作是若干个词汇的集合;他们可以看成一个由“与”、“或”关系连接而成的布尔表达式检索问题[2]。

用布尔表达式来表示广告的定向人群, 并且写成析取范式 (Disjunctive Normal Form, DNF) 的形式[3], 如ad= (age∈{3}∩state∈{NY}) ∪ (state∈{CA}∩gender∈{M}) 表示该广告的投放对象为:“3岁常驻NY的用户”或“常驻CA的男用户”。

1.1 定义

在DNF算法中, 对定向条件析取范式中的各元素有如下定义:

Conjunction

每个析取范式都可以分解为一个或多个Conjunction的并集;如ad可以分解为j1= (age∈{3}∩state∈{NY}) 和j2= (state∈{CA}∩gender∈{M}) 两个Conjunction;对于同一属性, 只能在一个Conjunction中出现一次。

Assignment

每个Conjunction又可以进一步分解为一个或多个Assignment的交集, 如j1可以分解为age∈{3}和state∈{NY}两个Assignment。

Sizeof (Conjunction)

表示某Conjunction中含有“∈”的Assignment数量, 即等于其包含非“”的Assignment个数[4]。

1.2 算法逻辑

布尔表达式的检索问题有两个特点, 是算法设计的重要依据:首先, 当某次广告请求的定向标签满足某个Conjunction时, 一定满足包含该Conjunction的所有广告, 这说明只需要对Conjunction建立倒排索引, 并加上一层Conjunction到Ad的辅助索引即可;其次, 在Conjunction的倒排索引中, 可以通过Conjunction的大小来减少检索时的计算量, 即当Sizeof (Query) 小于Sizeof (Conjunction) 时, 该Conjunction一定不满足检索条件[5]。

综上, DNF算法维护一个两层的倒排索引, 即上文所说的Conjunction到Ad、Assignment到Conjunction的两层索引, 前一个索引按照“或”的关系进行检索, 而在Conjunction到Assignment的索引中, 把每个Conjunction分解成一组 (key, value) 对, 例如将age∈{3, 4}分解成age∈{3}和age∈{4}两个关键词 (term) , 这些关键词即是倒排索引的值 (key) , 而“∈”和“”操作符则放在倒排链表的具体元素上。利用上文所述Assignment个数的约束, 可以将第二层倒排索引按照Sizeof (Conjunction) 分成若干部分, 以提高检索效率。

2 布尔表达式检索算法改进

从业务需求来看, 定向广告检索实际上可以理解为由用户标签到广告条件的定向匹配问题, 其匹配内容为属性[6]。对于用户标签来说:一个属性可为单值可为多值;多值间只能为“与”关系;如用户标签可为“喜欢电子产品”也可为“既喜欢电子产品又喜欢时尚”。对于广告条件来说:一个属性可为单值可为多值;多值间, 既可为“或”关系又可为“与”关系;如广告A的条件可为“投放给喜欢电子产品的用户”、“投放给喜欢电子产品或喜欢时尚的用户”也可为“投放给既喜欢电子产品又喜欢时尚的用户”。因此, 使用用户标签定向匹配广告条件实际上有如下六种情况。

从DNF算法来看, 由于其具有倒排索引的特点, 决定了在检索过程中:用户标签属性只能为单值;在索引建立过程中, 广告条件属性可为单值可为多值, 多值间只能为“或”关系。因此DNF算法只解决了情况1、2, 这样对广告主定制化的需求带来了极大的限制。定向广告条件匹配如表1所示。

2.1“与”关系多值属性检索

此部分将解决用户标签属性的多值“与”关系查询, 即根据用户标签查询广告时, 用户的某一属性若为多值, 则可查询出所有与之匹配的广告, 即情况3、4、5。在匹配广告时, 使用流归并的方法将用户同属性标签聚类后再做查询, 具体逻辑如下所示。

(1) 在广告检索查询时, 对于查询语句:将用户同属性的标签聚类, Sizeof (Query) 依旧为属性种类的个数。

(2) Conjunction倒排链表中:对只有一个值的属性, 处理方式不变;对有多个值的属性, 把多个值命中的Conjunction Id取并集;即最后归并的时候, 有两种类型的倒排拉链:单值的通过词表, 拿到倒排;多值的, 将所有命中单值的倒排归并起来。

2.2“与”关系多值属性索引建立

此部分将解决广告条件属性的多值“与”关系索引建立。即广告主在设置广告条件时, 可对一个属性选择必须满足的多个值;改进部分为索引建立部分, 即情况6。

在建立索引时, 使用一个int型数据代替“∈”或“”来表示Assignment中 (key, value) 对中的value值, 并在查询时进行流归并, 具体做法如下所示:

(1) 建立索引时, 对于“与”关系的多值属性引入一个参数, 来标记该属性需满足的条件数。Sizeof (Query) 依旧为属性的个数。

(2) 在结果查询过程中, 对于链表中value为“∈”或“”的属性, 处理方式不变;对于链表中值为int的属性, 计算倒排拉链中该属性在该Conjunction中出现的次数, 若出现次数等于int值, 则归并为一个属性继续查询;否则舍弃。

2.3 实例

假设广告库中有如下定向广告:

(1) 第一层索引建立

对文档的DNF描述进行分词, 抽取并迭代其包含的Conjunction:若为新Conjunction, 则分配一个新的ID (从0递增) ;否则用之前分配的ConjunctionID。将含有“与”的属性后加特殊标记“^”, 同时Conjunction的Size不变, 依旧为属性个数。

为每一个文档分配Ad ID (从0递增) , 并写入Conjunction ID到Ad ID的倒排关系, 形成第一层的索引。

分词后的Conjunction如下:

第一层倒排索引:

(2) 第二层索引建立

对Conjunction进行分词, 切成Assignment流, 其中关键词 (term) 为“属性+值”。如对于age∈{3;4}切出两个关键词:“age∈{3}”, “age∈{4}”;对于state{CA;NY}也切成两个关键词:“state{CA}”, “state{NY}”。不属于“”和属于“∈”体现在倒排拉链上。

计算Conjunction的大小并体现在关键词上, 最终的关键词组成为Sizeof[Conjunction], 属性, 值。

对于大小为0的Conjunction, 算法引入一个特殊的关键词, 将所有size为零的Conjunction都放在其倒排表中, 并赋以一个“∈”操作符 (Z, ∈) 。

写入倒排关系, term→ (Conjunction ID, ∈|) 。

第二层倒排索引:

(3) 检索

使用拥有标签“三岁”、“常驻CA或NY”、“男士”的受众进行广告检索。建立查询语句:age=3, state=CA/NY, gender=M, 由此可知Sizeof (Query) =3, 即用户带有三种属性, 则size>3的Conjunction则不予以考虑, 因为含有这样Conjunction的广告要求用户至少有4个属性。查询size=2, size=1, size=0层的Conjunction, 其中Index Term的前缀就是它的层。

查询size=2的层时, 对有state属性, 把“NY”、“CA”两值命中的Conjunction Id取并集, 结果如下所示:

由倒排拉链所示, 第一个链表与第二个链表头部的Conjunction ID一致, 即 (c1, ∈) , c1共出现两次, 无“”, 则c1符合要求。

同理, 完成所有查询后, 发现c1、c4、c5符合要求。查询第一层倒排索引可知ad1、ad4、ad5、ad6及ad7为符合受众的广告。

3 结束语

广告检索模块在精准广告系统中有着举足轻重的地位。在介绍了广告检索模块中解决定性广告检索问题的DNF算法后, 根据广告主需求的多样性对DNF算法进行了改进;使用流归并的方法在检索过程中, 将“与”关系的多值合并为同一属性建立索引并进行检索, 解决了用户标签属性的多值“与”关系索引建立及检索问题, 从而打破了DNF算法中属性值必唯一的限制。

参考文献

[1]Goldfarb A, Tucke C.Search engine advertising:channel substitution when pricing ads to context[J].Management Science, 2011, 57 (3) :458-470.

[2]Moffat A, Zoble J.Self-Indexing Inverted Files for Fast Text retrieval[J].ACMTransactions on Information Systems, 1996, 14 (4) :349-379.

[3]Brown E W.Fast evaluation of structured queries for information retrieval.[M]//E.A.Fox, P.Ingwersen, and R.Fidel, editors, SIGIR’95, Seattle, Washington, ACM Press, USA, Jul.9-13, 1995:30-38.

[4]Whang, Steven, Brower, et al.Indexing Boolean Expressions[Z].VLDB 2009, Lyon, France.Aug.24-28, 2009.

[5]Zobel J, Moffat A.Inverted files for text search engines[J].ACM Comput.Surv., 2006, 38 (2) :1-56.

篇4:《虫虫计划》不只是计划

动漫报:您认为对一部动画片来说是好的内容重要还是好的形象重要?

赵志强:对我来说,我感觉一部好的动画片是由多种元素构成的,内容和形象只是其中的一部分,创意、镜头处理、设计的动作、配音、背景音乐等也很重要,好的形象如果没有好的内容和好的设计团队同样不能产生好的作品,同时好的作品如果没有好的形象也是不行的。

灵感与推广同样重要

动漫报:《虫虫计划》这部动画片中小朋友最喜欢的就是马达这个形象了,是什么样的灵感启发索易公司创造出马达这样有趣的形象?

赵志强:我们根据现实中一种叫做黄莺虫的小虫子,结合符号化的设计创造出了马达这个角色的形象设计。在它的带领下,一群可爱的虫虫开始改造废弃的人类物品,用独特的视角讲述“变废为宝”,带小朋友进入一个奇妙、温馨的虫虫世界……

动漫报:在一部动画片中有多个角色形象,在今后发展中您打算力捧其中一个最热门的形象还是把动画片中所有的形象同时大力推广?

赵志强:每一部动画片都需要很多的角色来表演,和影视剧一样,都有主角和配角以及群众演员,全部的形象同时推广对企业来说成本很大,从市场的角度看难度也非常大,因此我们会以动画片的主要角色来进行推广和宣传。

开动马达获佳绩,乘风破浪再远航

动漫报:《虫虫计划》的动画自播出以来斩获“天下动漫风云榜”多项大奖,还有业内的其他各项大奖,是什么精神促使索易公司取得这样的成就?

赵志强:索易动画自开创以来一直致力中国原创动画的开发和推广,力求呼应国际动画主流思想,并以打造卓越卡通品牌和实现产业化目标为努力方向。历经不断地探索和艰苦创业,一批有志于动画创作事业的行业精英纷纷投入到这个热情奔放的团队中来,使之逐渐成长为代表着最新创意和超前创造力的聚集地,并造就了一支充满战斗力的专业动画创作队伍。我们不断地拿出新创意,用激情投入动漫形象创作,缘此基础和动力,为中国动画产业推波助澜、树立名牌动画企业已经成为我们奋斗的目标。中国动画事业任重而道远,我们不可能期待机会,机会只在自己手中,靠我们自己去创造。

立足长远,“虫子“品牌后劲足

动漫报:索易公司对《虫虫计划》后续的品牌发展有什么样的新计划?在未来会涉足一些别的领域吗?

赵志强:《虫虫计划》是我们公司重点打造的一个品牌,同时我们也在做商业化项目,现在我们在筹备投资一个多亿的索易欢乐城堡项目,索易欢乐城堡建筑面积2万多平方米,是一所综合性儿童动漫体验类教育场馆。在这里,孩子们不但可以亲身体验动画片的制作流程,还可以进行动漫的配音、经典动漫场景的体验,全方位接触最新科技集声光电为一体的动漫全息幻影、动漫角色扮演、非物质文化遗产、儿童室内剧演出等适合广大少年儿童的各种项目。还可以让广大少年儿童在安全互动的环境中尝试各项工作、体验真实的社会活动,理解通过劳动取得报酬的生存道理,为未来的健康成长和职业发展打下良好的认知基础。孩子们可以尽情选择自己理想中的各种职业,提前在这里实现他们未来的梦想。项目建成后,我们将以动画片作为宣传平台,以索易欢乐城堡为展示平台,以动漫衍生品为销售平台的综合性场所,逐渐形成一条完整的动漫产业链,动画品牌的制作推广和商业的市场化运营相结合是我们主要的尝试。

关注公益活动回馈社会

动漫报:索易公司长期以来打造了一个绿色环保健康的品牌,在今后的发展中会多做一些和公益有关的活动吗?

赵志强:环保、健康、积极向上一直是我们所要突出的主题,环保、绿色也是社会中越来越重视的现象,我们通过环保系列的主题宣传,引导少年儿童从小就要有环保的意识,同时也呼吁社会对环保的重视,我们还计划在以后的商业运营是和各种公益机构进行合作,在索易欢乐城堡中进行不同主题的公益活动,比如:爱眼日的活动宣传、环保主题的活动宣传、消防主题的活动宣传等。

《虫虫计划》不只是计划

《虫虫计划》时至今日取得的各项成就不只是在动画片领域,索易动画公司在品牌市场化道路上做出了多方面的努力并获得了不错的成绩。在图书方面,与天舟集团、知音漫客合作图书漫画;产品授权方面,与乐福、深圳麦熙、黑狮子、上海乐膳等制造业经销商就玩具、文具、日用品、游乐设备、服装、保健食品等展开合作;主题公园与主题酒店已与杭州、海南、成都等地达成意向并进入选址洽谈阶段。另外虫虫数字电影《水深火热》、首部全息数码舞台剧《虫虫世界》和《虫虫嘉年华》已进入前期洽谈和准备谈判。通过一系列的发展和推广,《虫虫计划》品牌形象已经打入了市场。,并具有高度的识别性和开放性,既取得好口碑,又取得了好影响。

而近几年郑州索易动画有限公司也在积极参与国内举办的各类动漫活动,并开展了产品展览、创造艺术的探讨,以及产品的交流与合作。项目品牌和企业品牌得到了业内和市场的高度认可和一致好评,并和多家企业在展会上深入洽谈、签约。努力缩小差距,以开放的心态做好品牌原创,积极构建以产业链为主的经营探索,真正形成以动漫促市场开拓、以原创促创造竞争、以品牌促人才聚合与创新的发展格局。

篇5:倒排计划

工程施工计划安排

(2013年12月-2014年1月)

浙江天立建设工程有限公司白塔区块发展路二期道路工程项目部

2013年12月1日

一、施工计划编制说明

本段道路工程为发展路的一段,道路起点与原发展路西段相衔接,沿线与内河北路、经五路、经六路及经七路平面交叉,工程桩号为K0+000~K0+980,全长980米。本工程除了与经七路交叉口及人行道铺装以外,其他都纳入本工程范围。给排水工程中雨水管道工程中给水管道工程不在本工程范围内,大于D500的管道为I级钢筋混凝土,基础为钢筋混凝土,其余的为UPVC加筋部分。

截止目前,工程项目的雨、污水管道工程已基本完成,剩余的工程量中污水管道有87m DN400的UPVC加筋管(因W31-W28桥梁施工影响)。路基土方施工情况,标段内K0+000~K0+635及K0+820~K0+980路基填方已基本完成,K0+635~K0+795段路基已完成一半填筑。

由上述情况跟原计划施工进度安排比较,已完成各分项工程比计划晚4个月,主要原因是政府未及时解决村民的征地赔偿问题,导致村民阻扰项目部施工。目前我项目部根据合同工期及实际施工进度情况重新进行编制、统筹安排各分项工程及各工序施工。

二、施工安排计划

现在经过重新布署,施工方案重做调整,根据工期要求,对未完工程量综合考虑,就施工目标、配备足够的机械设备、材料供应、劳动力等,对工期保证措施等计划重新安排如下,确保剩余工程保质如期完成,根据发展路二号桥的施工情况再具体调整:

(一)、施工总体部署:

首先要完成K0+635~K0+795路基填方工程施工,同时雨水管道雨箅井及雨箅管道施工跟进,接着就是稳定层及路面混泥土浇筑,同时闸门井、检查井等辅助工程进行施工。施工重点为路基填筑、水泥稳定层、水泥路面施工,同时要认真作好施工期间的交通疏导工作,确保施工与安全两不误。

(二)、施工目标划分(里程碑事件):

1、2013年12月5之前,完成所有路基填筑工程工作。

2、2014年1月1之前,确保水泥稳定层施工完成。

3、2014年2月1之前,确保水泥路面工程完工。

(三)、主要工序划分:

1、主要工序:沟槽开挖→污水管铺设(雨水管铺设)→路基填筑

→路面工程。

2、辅助工序:各种管线的横穿管道安装及井体砌筑→交通划线。

(四)、主要施工计划:

1、路基土石方挖运、填筑:

(1)主要剩余工程量:路基填筑5018m3,(2)施工起讫日期:2013年12月1日~2013年12月5日。

(3)主要施工措施:采用装载机1台、挖掘机2台、振动压路机

1台、推土机1台、自卸汽车8辆。

2、路面工程:

A、主车道级配碎石摊铺:

(1)主要剩余工程量: 11175.9m

2(2)施工起讫日期:2013年12月4日~2013年12月10日。

(3)主要施工措施:采用装载机1台、振动压路机1台、挖

机1台、平地机1台、自卸汽车(10轮卡)5辆、洒水车

1辆。

B、主车道水泥稳定碎石摊铺:

(1)主要工程量: 10494m2。

(2)施工起讫日期:2013年12月11日~2013年12月

31日。

(3)主要施工措施:采用装载机1台、振动压路机1台、挖

机1台、平地机1台、水稳摊铺机1台、洒水车1辆、自

卸汽车(10轮卡)5辆、东风4轮卡4辆。

C、水泥混凝土路面:

(1)主要工程量:9444.4 m

2(2)施工起讫日期:2014年01月01日~2014年01月31日。

(3)主要施工措施:1.1KW抹光机2台、2.2KW平板振动器

4、台插入式振动器4台、砼振动梁2台、刻纹机2台、砼切割

机2台、防雨棚50米。

3、各种管线横穿支管、井体砌筑、闸门井等工程作为施工辅助

工序可在确保主要工序完成的先决条件下可以平行交叉进

行。

(五)人员保证措施:

各种机械的操作技工必须有倒班轮换的补充人员,路基施工、配合工不得少于5人,排水工程作业班组的作业人数不得少于20人;辅助工程每班作业人数不得少于20人;水泥稳定碎石层及水泥混凝土面层作业时每班不得少于20人;

(六)材料保证措施:

(1)排水工程,双壁波纹管、水泥砼管必须提前5天报计划材

料部,材料必须按计划时间、数量如期到位,如遇特殊情

况,动用库存材料。

(2)级配碎石垫层施工,每天必须保证500 m3以上的材料供应。

原则上采用外购渠道进行。

(3)水泥稳定碎石基层,采用备料场材料,但必须满足20天

以上的工作量,并动态跟踪随时补充。

(4)水泥混凝土路面施工,应事先进行石料、混凝土配合比设

计,避免因质量保证资料及材料提供不及时而产生工期延

误。

三、合理化建议:

(1)业主应对涉及厂房施工方、桥梁施工方的施工场地、水电

等问题能及时协调。

(2)希望业主能及时支付每期的工程款,使工程能够及时、顺

利继续下去。

(3)根据员工每周绩效,及时发放绩效奖金,有效促进员工的主观能动性。

(4)实行材料供应问责制,简化小型材料机具的采购供应程

序,避免不必要的误工现象。

篇6:倒排计划

1、对每个块构造一个独立的倒排索引。

2、最后将所有独立的倒排索引进行合并就OK了。

本人为了方便就把这个算法的实现简洁化了,直接在内存中完成所有的构建工作。望读者稍加注意。SPIMI相对比较的简单,这里就不给出截图了。

算法的代码实现

首先是文档的输入数据,采用了2个一样的文档,我也是实在想不出有更好的测试数据了

doc1.txt:

Mike studyed English hardly yesterdayHe got the 100 at the last examHe thinks English is very interesting

doc2.txt:

Mike studyed English hardly yesterdayHe got the 100 at the last examHe thinks English is very interesting下面是文档信息预处理类PreTreatTool.java:

package InvertedIndex;import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileReader;import java.io.IOException;import java.io.PrintStream;import java.util.ArrayList;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * 文档预处理工具类 * * @author lyq * */public class PreTreatTool { // 一些无具体意义的过滤词 public static String[] FILTER_WORDS = new String[] { “at”, “At”, “The”, “the”, “is”, “very” }; // 批量文档的文件地址 private ArrayList docFilePaths; // 输出的有效词的存放路径 private ArrayList effectWordPaths; public PreTreatTool(ArrayList docFilePaths) { this.docFilePaths = docFilePaths; } /** * 获取文档有效词文件路径 * * @return */ public ArrayList getEFWPaths() { return this.effectWordPaths; } /** * 从文件中读取数据 * * @param filePath *单个文件 */ private ArrayList readDataFile(String filePath) { File file = new File(filePath); ArrayList dataArray = new ArrayList(); ArrayList words = new ArrayList(); try { BufferedReader in = new BufferedReader(new FileReader(file)); String str; String[] tempArray; while ((str = in.readLine()) != null) { tempArray = str.split(“ ”); dataArray.add(tempArray); } in.close(); } catch (IOException e) { e.getStackTrace(); } // 将每行词做拆分加入到总列表容器中 for (String[] array : dataArray) { for (String word : array) { words.add(word); } } return words; } /** * 对文档内容词汇进行预处理 */ public void preTreatWords() { String baseOutputPath = “”; int endPos = 0; ArrayList tempWords = null; effectWordPaths = new ArrayList(); for (String filePath : docFilePaths) { tempWords = readDataFile(filePath); filterWords(tempWords, true); // 重新组装出新的输出路径 endPos = filePath.lastIndexOf(“.”); baseOutputPath = filePath.substring(0, endPos); writeOutOperation(tempWords, baseOutputPath + “-efword.txt”); effectWordPaths.add(baseOutputPath + “-efword.txt”); } } /** * * 对文档中的词语进行过滤操作 * * @param words *待处理文档词语 * @param canRepeated *有效词是否可以重复 */ private void filterWords(ArrayList words, boolean canRepeated) { boolean isFilterWord; // 做形容词匹配 Pattern adjPattern; // 做动词时态的匹配 Pattern formerPattern; // 数字匹配 Pattern numberPattern; Matcher adjMatcher; Matcher formerMatcher; Matcher numberMatcher; ArrayList deleteWords = new ArrayList(); adjPattern = Pattern.compile(“.*(ly$|ful$|ing$)”); formerPattern = Pattern.compile(“.*ed$”); numberPattern = Pattern.compile(“[0-9]+(.[0-9]+)?”); String w; for (int i = 0; i < words.size(); i++) { w = words.get(i); isFilterWord = false; for (String fw : FILTER_WORDS) { if (fw.equals(w)) { deleteWords.add(w); isFilterWord = true; break; } } if (isFilterWord) { continue; } adjMatcher = adjPattern.matcher(w); formerMatcher = formerPattern.matcher(w); numberMatcher = numberPattern.matcher(w); // 将词语统一小写字母化 w = w.toLowerCase(); // 如果是形容词,副词形式的或是纯数字的词,则进行过滤 if (adjMatcher.matches() || numberMatcher.matches()) { deleteWords.add(w); } else if (formerMatcher.matches()) { // 如果是ed结尾表明是动词的在时态方面的变化,进行变化,转为原有动词的形式,截去最末尾2个额外添加的后缀词 w = w.substring(0, w.length() - 2); }words.set(i, w); } // 进行无效词的过滤 words.removeAll(deleteWords); deleteWords.clear(); String s1; String s2; // 进行词语的去重 for (int i = 0; i < words.size() - 1; i++) { s1 = words.get(i); for (int j = i + 1; j < words.size(); j++) { s2 = words.get(j); // 找到存在相同的词了,就挑出循环 if (s1.equals(s2)) { deleteWords.add(s1); break; } } } // 删除多余重复的词语 words.removeAll(deleteWords); words.addAll(deleteWords); } /** * 将数据写出到磁盘文件操作,如果文件已经存在,则在文件尾部进行内容追加 * * @param buffer *当前写缓冲中的数据 * @param filePath *输出地址 */ private void writeOutOperation(ArrayList buffer, String filePath) { StringBuilder strBuilder = new StringBuilder(); // 将缓冲中的数据组成字符写入到文件中 for (String word : buffer) { strBuilder.append(word); strBuilder.append(“n”); } try { File file = new File(filePath); PrintStream ps = new PrintStream(new FileOutputStream(file)); ps.print(strBuilder.toString());// 往文件里写入字符串 } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}文档类Document.java:

package InvertedIndex;import java.util.ArrayList;/** * 文档类 * @author lyq * */public class Document { //文档的唯一标识 int docId; //文档的文件地址 String filePath; //文档中的有效词 ArrayList effectWords; public Document(ArrayList effectWords, String filePath){ this.effectWords = effectWords; this.filePath = filePath; } public Document(ArrayList effectWords, String filePath, int docId){ this(effectWords, filePath); this.docId = docId; }}BSBI算法工具类BSBITool.java:

package InvertedIndex;import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileReader;import java.io.IOException;import java.io.PrintStream;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;/** * BSBI基于磁盘的外部排序算法 * * @author lyq * */public class BSBITool { // 文档唯一标识ID public static int DOC_ID = 0; // 读缓冲区的大小 private int readBufferSize; // 写缓冲区的大小 private int writeBufferSize; // 读入的文档的有效词文件地址 private ArrayList effectiveWordFiles; // 倒排索引输出文件地址 private String outputFilePath; // 读缓冲 1 private String[][] readBuffer1; // 读缓冲2 private String[][] readBuffer2; // 写缓冲区 private String[][] writeBuffer; // 有效词与hashcode的映射 private Map code2word; public BSBITool(ArrayList effectiveWordFiles, int readBufferSize, int writeBufferSize) { this.effectiveWordFiles = effectiveWordFiles; this.readBufferSize = readBufferSize; this.writeBufferSize = writeBufferSize; initBuffers(); } /** * 初始化缓冲区的设置 */ private void initBuffers() { readBuffer1 = new String[readBufferSize][2]; readBuffer2 = new String[readBufferSize][2]; writeBuffer = new String[writeBufferSize][2]; } /** * 从文件中读取有效词并进行编码替换 * * @param filePath *返回文档 */ private Document readEffectWords(String filePath) { long hashcode = 0; String w; Document document; code2word = new HashMap(); ArrayList words; words = readDataFile(filePath); for (int i = 0; i < words.size(); i++) { w = words.get(i); hashcode = BKDRHash(w); hashcode = hashcode % 10000; // 将有效词的hashcode取模值作为对应的代表 code2word.put(hashcode + “”, w); w = hashcode + “”; words.set(i, w); } document = new Document(words, filePath, DOC_ID); DOC_ID++; return document; } /** * 将字符做哈希值的转换 * * @param str *待转换字符 * @return */ private long BKDRHash(String str) { int seed = 31; /* 31 131 1313 13131 131313 etc.. */ long hash = 0; int i = 0; for (i = 0; i < str.length(); i++) { hash = (hash * seed) + (str.charAt(i)); } return hash; } /** * 根据输入的有效词输出倒排索引文件 */ public void outputInvertedFiles() { int index = 0; String baseFilePath = “”; utputFilePath = “”; Document doc; ArrayList tempPaths; ArrayList invertedData1; ArrayList invertedData2; tempPaths = new ArrayList(); for (String filePath : effectiveWordFiles) { doc = readEffectWords(filePath); writeOutFile(doc); index = doc.filePath.lastIndexOf(“.”); baseFilePath = doc.filePath.substring(0, index); writeOutOperation(writeBuffer, baseFilePath + “-temp.txt”); tempPaths.add(baseFilePath + “-temp.txt”); } utputFilePath = baseFilePath + “-bsbi-inverted.txt”; // 将中间产生的倒排索引数据进行总的合并并输出到一个文件中 for (int i = 1; i < tempPaths.size(); i++) { if (i == 1) { invertedData1 = readInvertedFile(tempPaths.get(0)); } else { invertedData1 = readInvertedFile(outputFilePath); } invertedData2 = readInvertedFile(tempPaths.get(i)); mergeInvertedData(invertedData1, invertedData2, false, outputFilePath); writeOutOperation(writeBuffer, outputFilePath, false); } } /** * 将文档的最终的倒排索引结果写出到文件 * * @param doc *待处理文档 */ private void writeOutFile(Document doc) { // 在读缓冲区中是否需要再排序 boolean ifSort = true; int index = 0; String baseFilePath; String[] temp; ArrayList tempWords = (ArrayList) doc.effectWords .clone(); ArrayList invertedData1; ArrayList invertedData2; invertedData1 = new ArrayList(); invertedData2 = new ArrayList(); // 将文档的数据平均拆分成2份,用于读入后面的2个缓冲区中 for (int i = 0; i < tempWords.size() / 2; i++) { temp = new String[2]; temp[0] = tempWords.get(i); temp[1] = doc.docId + “”; invertedData1.add(temp); temp = new String[2]; temp[0] = tempWords.get(i + tempWords.size() / 2); temp[1] = doc.docId + “”; invertedData2.add(temp); } // 如果是奇数个,则将最后一个补入 if (tempWords.size() % 2 == 1) { temp = new String[2]; temp[0] = tempWords.get(tempWords.size() - 1); temp[1] = doc.docId + “”; invertedData2.add(temp); } index = doc.filePath.lastIndexOf(“.”); baseFilePath = doc.filePath.substring(0, index); mergeInvertedData(invertedData1, invertedData2, ifSort, baseFilePath + “-temp.txt”); } /** * 合并读缓冲区数据写到写缓冲区中,用到了归并排序算法 * * @param outputPath *写缓冲区的写出的路径 */ private void mergeWordBuffers(String outputPath) { int i = 0; int j = 0; int num1 = 0; int num2 = 0; // 写缓冲区下标 int writeIndex = 0; while (readBuffer1[i][0] != null && readBuffer2[j][0] != null) { num1 = Integer.parseInt(readBuffer1[i][0]); num2 = Integer.parseInt(readBuffer2[j][0]); // 如果缓冲1小,则优先存缓冲1到写缓冲区中 if (num1 < num2) { writeBuffer[writeIndex][0] = num1 + “”; writeBuffer[writeIndex][1] = readBuffer1[i][1]; i++; } else if (num2 < num1) { writeBuffer[writeIndex][0] = num2 + “”; writeBuffer[writeIndex][1] = readBuffer1[j][1]; j++; } else if (num1 == num2) { // 如果两个缓冲区中的数字一样,说明是同个有效词,先进行合并再写入 writeBuffer[writeIndex][0] = num1 + “”; writeBuffer[writeIndex][1] = readBuffer1[i][1] + “:”+ readBuffer2[j][1]; i++; j++; } // 写的指针往后挪一位 writeIndex++; // 如果写满写缓冲区时,进行写出到文件操作 if (writeIndex >= writeBufferSize) { writeOutOperation(writeBuffer, outputPath); writeIndex = 0; } } if (readBuffer1[i][0] == null) { writeRemainReadBuffer(readBuffer2, j, outputPath); } if (readBuffer2[j][0] == null) { writeRemainReadBuffer(readBuffer1, j, outputPath); } } /** * 将数据写出到磁盘文件操作,如果文件已经存在,则在文件尾部进行内容追加 * * @param buffer *当前写缓冲中的数据 * @param filePath *输出地址 */ private void writeOutOperation(String[][] buffer, String filePath) { String word; StringBuilder strBuilder = new StringBuilder(); // 将缓冲中的数据组成字符写入到文件中 for (String[] array : buffer) { if (array[0] == null) { continue; } word = array[0]; strBuilder.append(word); strBuilder.append(“ ”); strBuilder.append(array[1]); strBuilder.append(“n”); } try { File file = new File(filePath); PrintStream ps = new PrintStream(new FileOutputStream(file)); ps.print(strBuilder.toString());// 往文件里写入字符串 } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 将数据写出到磁盘文件操作,如果文件已经存在,则在文件尾部进行内容追加 * * @param buffer *当前写缓冲中的数据 * @param filePath *输出地址 * @param isCoded *是否以编码的方式输出 */ private void writeOutOperation(String[][] buffer, String filePath, boolean isCoded) { String word; StringBuilder strBuilder = new StringBuilder(); // 将缓冲中的数据组成字符写入到文件中 for (String[] array : buffer) { if (array[0] == null) { continue; } if(!isCoded){ word = code2word.get(array[0]); }else{ word = array[0]; } strBuilder.append(word); strBuilder.append(“ ”); strBuilder.append(array[1]); strBuilder.append(“n”); } try { File file = new File(filePath); PrintStream ps = new PrintStream(new FileOutputStream(file)); ps.print(strBuilder.toString());// 往文件里写入字符串 } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 将剩余的读缓冲区中的数据读入写缓冲区中 * * @param remainBuffer *读缓冲区的剩余缓冲 * @param currentReadPos *当前的读取位置 * @param outputPath *写缓冲区的写出文件路径 */ private void writeRemainReadBuffer(String[][] remainBuffer, int currentReadPos, String outputPath) { while (remainBuffer[currentReadPos][0] != null && currentReadPos < readBufferSize) { removeRBToWB(remainBuffer[currentReadPos]); currentReadPos++; // 如果写满写缓冲区时,进行写出到文件操作 if (writeBuffer[writeBufferSize - 1][0] != null) { writeOutOperation(writeBuffer, outputPath); } } } /** * 将剩余读缓冲区中的数据通过插入排序的方式插入写缓冲区 * * @param record */ private void removeRBToWB(String[] record) { int insertIndex = 0; int endIndex = 0; long num1; long num2; long code = Long.parseLong(record[0]); // 如果写缓冲区目前为空,则直接加入 if (writeBuffer[0][0] == null) { writeBuffer[0] = record; return; } // 寻找待插入的位置 for (int i = 0; i < writeBufferSize - 1; i++) { if (writeBuffer[i][0] == null) { endIndex = i; break; } num1 = Long.parseLong(writeBuffer[i][0]); if (writeBuffer[i + 1][0] == null) { if (code > num1) { endIndex = i + 1; insertIndex = i + 1; } } else { num2 = Long.parseLong(writeBuffer[i + 1][0]); if (code > num1 && code < num2) { insertIndex = i + 1; } } } // 进行插入操作,相关数据进行位置迁移 for (int i = endIndex; i > insertIndex; i--) { writeBuffer[i] = writeBuffer[i - 1]; } writeBuffer[insertIndex] = record; } /** * 将磁盘中的2个倒排索引数据进行合并 * * @param invertedData1 *倒排索引为文件数据1 * @param invertedData2 *倒排索引文件数据2 * @param isSort *是否需要对缓冲区中的数据进行排序 * @param outputPath *倒排索引输出文件地址 */ private void mergeInvertedData(ArrayList invertedData1, ArrayList invertedData2, boolean ifSort, String outputPath) { int rIndex1 = 0; int rIndex2 = 0; // 重新初始化缓冲区 initBuffers(); while (invertedData1.size() > 0 && invertedData2.size() > 0) { readBuffer1[rIndex1][0] = invertedData1.get(0)[0]; readBuffer1[rIndex1][1] = invertedData1.get(0)[1]; readBuffer2[rIndex2][0] = invertedData2.get(0)[0]; readBuffer2[rIndex2][1] = invertedData2.get(0)[1]; invertedData1.remove(0); invertedData2.remove(0); rIndex1++; rIndex2++; if (rIndex1 == readBufferSize) { if (ifSort) { wordBufferSort(readBuffer1); wordBufferSort(readBuffer2); } mergeWordBuffers(outputPath); initBuffers(); } } if (ifSort) { wordBufferSort(readBuffer1); wordBufferSort(readBuffer2); } mergeWordBuffers(outputPath); readBuffer1 = new String[readBufferSize][2]; readBuffer2 = new String[readBufferSize][2]; if (invertedData1.size() == 0 && invertedData2.size() > 0) { readRemainDataToRB(invertedData2, outputPath); } else if (invertedData1.size() > 0 && invertedData2.size() == 0) { readRemainDataToRB(invertedData1, outputPath); } } /** * 剩余的有效词数据读入读缓冲区 * * @param remainData *剩余数据 * @param outputPath *输出文件路径 */ private void readRemainDataToRB(ArrayList remainData, String outputPath) { int rIndex = 0; while (remainData.size() > 0) { readBuffer1[rIndex][0] = remainData.get(0)[0]; readBuffer1[rIndex][1] = remainData.get(0)[1]; remainData.remove(0); rIndex++; // 读缓冲 区写满,进行写入到写缓冲区中 if (readBuffer1[readBufferSize - 1][0] != null) { wordBufferSort(readBuffer1); writeRemainReadBuffer(readBuffer1, 0, outputPath); initBuffers(); } } wordBufferSort(readBuffer1); writeRemainReadBuffer(readBuffer1, 0, outputPath); } /** * 缓冲区数据进行排序 * * @param buffer *缓冲空间 */ private void wordBufferSort(String[][] buffer) { String[] temp; int k = 0; long num1 = 0; long num2 = 0; for (int i = 0; i < buffer.length - 1; i++) { // 缓冲区可能没填满 if (buffer[i][0] == null) { continue; } k = i; for (int j = i + 1; j < buffer.length; j++) { // 缓冲区可能没填满 if (buffer[j][0] == null) { continue; } // 获取2个缓冲区小块的起始编号值 num1 = Long.parseLong(buffer[k][0]); num2 = Long.parseLong(buffer[j][0]); if (num2 < num1) { k = j; } } if (k != i) { temp = buffer[k]; buffer[k] = buffer[i]; buffer[i] = temp; } } } /** * 从文件中读取倒排索引数据 * * @param filePath *单个文件 */ private ArrayList readInvertedFile(String filePath) { File file = new File(filePath); ArrayList dataArray = new ArrayList(); try { BufferedReader in = new BufferedReader(new FileReader(file)); String str; String[] tempArray; while ((str = in.readLine()) != null) { tempArray = str.split(“ ”); dataArray.add(tempArray); } in.close(); } catch (IOException e) { e.getStackTrace(); } return dataArray; } /** * 从文件中读取数据 * * @param filePath *单个文件 */ private ArrayList readDataFile(String filePath) { File file = new File(filePath); ArrayList dataArray = new ArrayList(); ArrayList words = new ArrayList(); try { BufferedReader in = new BufferedReader(new FileReader(file)); String str; String[] tempArray; while ((str = in.readLine()) != null) { tempArray = str.split(“ ”); dataArray.add(tempArray); } in.close(); } catch (IOException e) { e.getStackTrace(); } // 将每行词做拆分加入到总列表容器中 for (String[] array : dataArray) { for (String word : array) { if (!word.equals(“”)) { words.add(word); } } } return words; }}SPIMI算法工具类SPIMITool.java:

package InvertedIndex;import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.FileReader;import java.io.IOException;import java.io.PrintStream;import java.util.ArrayList;/** * SPIMI内存式单边扫描构建算法 * @author lyq * */public class SPIMITool { //倒排索引输出文件地址 private String outputFilePath; // 读入的文档的有效词文件地址 private ArrayList effectiveWordFiles; // 内存缓冲区,不够还能够在增加空间 private ArrayList buffers; public SPIMITool(ArrayList effectiveWordFiles){ this.effectiveWordFiles = effectiveWordFiles; } /** * 从文件中读取数据 * * @param filePath *单个文件 */ private ArrayList readDataFile(String filePath) { File file = new File(filePath); ArrayList dataArray = new ArrayList(); ArrayList words = new ArrayList(); try { BufferedReader in = new BufferedReader(new FileReader(file)); String str; String[] tempArray; while ((str = in.readLine()) != null) { tempArray = str.split(“ ”); dataArray.add(tempArray); } in.close(); } catch (IOException e) { e.getStackTrace(); } // 将每行词做拆分加入到总列表容器中 for (String[] array : dataArray) { for (String word : array) { words.add(word); } } return words; } /** * 根据已有的文档数据进行倒排索引文件的构建 * @param docs * 文档集合 */ private void writeInvertedIndex(ArrayList docs){ ArrayList datas; String[] recordData; buffers = new ArrayList(); for(Document tempDoc: docs){ datas = tempDoc.effectWords;for(String word: datas){ recordData = new String[2]; recordData[0] = word; recordData[1] = tempDoc.docId + “”; addRecordToBuffer(recordData); } } //最后将数据写出到磁盘中 writeOutOperation(buffers, outputFilePath); } /** * 将新读入的数据记录读入到内存缓冲中,如果存在则加入到倒排记录表中 * @param insertedData * 待插入的数据 */ private void addRecordToBuffer(String[] insertedData){ boolean isContained = false; String wordName; wordName = insertedData[0]; for(String[] array: buffers){ if(array[0].equals(wordName)){ isContained = true; //添加倒排索引记录,以:隔开 array[1] += “:” + insertedData[1]; break; } } //如果没有包含,则说明是新的数据,直接添加 if(!isContained){ buffers.add(insertedData); } } /** * 将数据写出到磁盘文件操作,如果文件已经存在,则在文件尾部进行内容追加 * @param buffer * 当前写缓冲中的数据 * @param filePath * 输出地址 */ private void writeOutOperation(ArrayList buffer, String filePath) { StringBuilder strBuilder = new StringBuilder(); //将缓冲中的数据组成字符写入到文件中 for(String[] array: buffer){ strBuilder.append(array[0]); strBuilder.append(“ ”); strBuilder.append(array[1]); strBuilder.append(“n”); } try { File file = new File(filePath); PrintStream ps = new PrintStream(new FileOutputStream(file)); ps.println(strBuilder.toString());// 往文件里写入字符串 } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 构造倒排索引文件 */ public void createInvertedIndexFile(){ int docId = 1; String baseFilePath; String fileName; String p; int index1 = 0; int index2 = 0; Document tempDoc; ArrayList words; ArrayList docs; utputFilePath = “spimi”; docs = new ArrayList(); p = effectiveWordFiles.get(0); //提取文件名称 index1 = p.lastIndexOf(“”); baseFilePath = p.substring(0, index1+1); utputFilePath = baseFilePath + “spimi”; for(String path: effectiveWordFiles){ //获取文档有效词 words = readDataFile(path); tempDoc = new Document(words, path, docId);docId++; docs.add(tempDoc);//提取文件名称 index1 = path.lastIndexOf(“”); index2 = path.lastIndexOf(“.”); fileName = path.substring(index1+1, index2);outputFilePath += “-” + fileName; } outputFilePath += “.txt”; //根据文档数据进行倒排索引文件的创建 writeInvertedIndex(docs); }}算法测试类Client.java:

package InvertedIndex;import java.util.ArrayList;/** * 倒排索引测试类 * @author lyq * */public class Client { public static void main(String[] args){ //读写缓冲区的大小 int readBufferSize; int writeBufferSize; String baseFilePath; PreTreatTool preTool; //BSBI基于磁盘的外部排序算法 BSBITool bTool; //SPIMI内存式单边扫描构建算法 SPIMITool sTool; //有效词文件路径 ArrayList efwFilePaths; ArrayList docFilePaths; readBufferSize = 10; writeBufferSize = 20; baseFilePath = “C:UserslyqDesktopicon”; docFilePaths = new ArrayList(); docFilePaths.add(baseFilePath + “doc1.txt”); docFilePaths.add(baseFilePath + “doc2.txt”); //文档预处理工具类 preTool = new PreTreatTool(docFilePaths); preTool.preTreatWords(); //预处理完获取有效词文件路径 efwFilePaths = preTool.getEFWPaths(); bTool = new BSBITool(efwFilePaths, readBufferSize, writeBufferSize); bTool.outputInvertedFiles(); sTool = new SPIMITool(efwFilePaths); sTool.createInvertedIndexFile(); }}算法的输出:

为了模拟出真实性,算法的输出都是以文件的形式,

首先是预处理类处理之后的有效词文件doc1-efword.txt和doc2-efword.txt:

mikestudyyesterdaygotlastexamthinksenglishhe可以看见,一些修饰词什么的已经被我过滤掉了。

下面是BSBI算法生成的中间文件,就是映射成编码的文件,也许你看了这些数值真实表示的是什么词语:

1426 01542 02540 03056 03325 04326 04897 06329 07327 0还有文档2的临时文件:

1426 11542 12540 13056 13325 14326 14897 16329 17327 1将这2个文档的信息进行合并最终输出的倒排索引文件为:

yesterday 0:1mike 0:1got 0:1english 0:1he 0:1last 0:1thinks 0:1study 0:1exam 0:1同样的SPIMI算法输出的结果:

mike 1:2study 1:2yesterday 1:2got 1:2last 1:2exam 1:2thinks 1:2english 1:2he 1:2

算法小结

上一篇:第十六课生物钟下一篇:多功能拍子小学三年级作文