参考关键词:(煤 OR COAL) (2N) (采 OR 矿 OR 井 OR EXCAVAT* OR MINE OR MINING OR PRODUCTING) 参考检索式:IPC=(E02D17/20 OR E02D19/06) AND TIABC=((煤 OR COAL) (2N) (采 OR 矿 OR 井 OR EXCAVAT* OR MINE OR MINING OR PRODUCTING))
Stata 中当然是不支持这种参考检索式的,所以我们需要把这些检索式一一翻译成正则表达式。这里有一些注意事项:
IPC 表示 IPC 专利分类号;
TIABC 表示标题+摘要;
检索式中的 N、W 和 S 是检索词的连接关系符号。N 没有顺序的限制,W 有顺序限制,S则是在同一句。1/2/3的数字表示两个检索词之间的隔的字数(小于等于该数字)。如检索“车座”(1N)“车把”,可以检索出“车座和车把”、“车把和车座”、“车座车把”、“车把车座”等将车座与车把间隔小于等于1个字并且没有顺序的语句,但检索“车座”(1W)“车把”仅能检索出“车座和车把”或“车座在车把”、“车座车把”等将车座与车把间隔小于等于1个字并且有顺序的语句。
因此例如这个翻译成 Stata 支持的正则表达式应该是:
:=> (煤 OR COAL) (2N) (采 OR 矿 OR 井 OR EXCAVAT* OR MINE OR MINING OR PRODUCTING) :=> ustrregexm(text, "((煤)|(COAL))(.{0,2})((采)|(矿)|(井)|(EXCAVAT)|(MINE)|(MINING)|(PRODUCTING))")|ustrregexm(text, "((采)|(矿)|(井)|(EXCAVAT)|(MINE)|(MINING)|(PRODUCTING))(.{0,2})((煤)|(COAL))")
clear all set obs 6 input str100 text "煤炭开采" "煤采" "煤炭开发开采" "coal-mining" 开采煤炭 "co-mining" compress gen code = `"ustrregexm(text, "((煤)|(COAL))(.{0,2})((采)|(矿)|(井)|(EXCAVAT)|(MINE)|(MINING)|(PRODUCTING))")|ustrregexm(text, "((采)|(矿)|(井)|(EXCAVAT)|(MINE)|(MINING)|(PRODUCTING))(.{0,2})((煤)|(COAL))")"' gen res = `=code[_n]'
*- 从 mata 的 v5 再创建变量 mata: stata("cap drop newvar") st_addvar("strL", "newvar") st_sstore(., "newvar", v5) end
drop 分类号 n ren newvar IPC
replace IPC = ustrregexs(1) if ustrregexm(IPC, "(.*)\(") save"IPC分类号拆分结果", replace
另外一方面处理 绿色低碳技术专利IPC对照表.dta 数据:
*- 拆分 IPC 对照表 use 绿色低碳技术专利IPC对照表, clear gather *涉及 dropifmissing(value) split value, parse(, ;) drop value
renvar 全部或部分涉及 gather value* dropifmissing(value) replace value = ustrregexs(1) if ustrregexm(value, "(.*)\(") replace value = ustrregexs(1) if ustrregexm(value, "(.*)\)") dropvar ren value IPC gen len = strlen(IPC) gsort 绿色低碳技术ID IPC gen ipcid = _n tab len save"data1", replace
*- 1. 长度为 3,范围 use data1, clear tab len keepif len == 3 order 绿色低碳技术ID ipcid drop len save ipcres1, replace
*- 2. 长度为 4,范围 use data1, clear tab len keepif len == 4 order 绿色低碳技术ID ipcid drop len save ipcres2, replace
*- 3. 长度为 8、9、10,具体 use data1, clear tab len keepifinlist(len, 8, 9, 10) drop len order 绿色低碳技术ID ipcid save ipcres3, replace
这样就可以分别根据这三个文件筛选了:
*- ipcres1 use IPC分类号拆分结果, clear replace IPC = substr(IPC, 1, 3) recast str3 IPC joinby IPC using ipcres1 gsort newzlid duplicatesdrop _all, force drop IPC save 第一部分, replace
*- ipcres2 use IPC分类号拆分结果, clear replace IPC = substr(IPC, 1, 4) recast str4 IPC joinby IPC using ipcres2 gsort newzlid duplicatesdrop _all, force drop IPC save 第二部分, replace
*- ipcres3 use IPC分类号拆分结果, clear recast str300 IPC compress joinby IPC using ipcres3 gsort newzlid duplicatesdrop _all, force drop IPC save 第三部分, replace
*- 合并三部分结果 use 第一部分, clear append using 第二部分 append using 第三部分 compress foreach i of varlist _all { capformat`i' %10s } save 初步筛选结果, replace
这样我们就初步筛选所有可能涉及的绿色低碳专利了。
从初步筛选结果中提取全部涉及的
全部涉及的就直接保留即可:
use 初步筛选结果, clear keepif 全部或部分涉及 == "全部涉及" drop 全部或部分涉及 save"全部涉及筛选结果", replace
从初步筛选结果中提取部分涉及的
再保留部分涉及的结果:
use 初步筛选结果, clear dropif 全部或部分涉及 == "全部涉及" drop 全部或部分涉及 keep newzlid duplicatesdrop newzlid, force merge 1:m newzlid using "IPC分类号拆分结果.dta" keepif _m == 3 drop _m mergem:1 newzlid using 2010年专利申请数据.dta keepif _m == 3 drop _m drop 分类号 主分类号 专利类型 公开公告号 gen text = 专利名称 + " " + 摘要 drop 专利名称 摘要 replace text = strupper(text) replace text = subinstr(text, "<SUB>", "", .) ren IPC 分类号 save 待筛选部分涉及, replace
再回到 参考检索式_手动调整.xlsx 结果上,首先把该文件读取并处理下:
import excel using "参考检索式_手动调整.xlsx", clear first foreach i of varlist _all { capformat`i' %10s } keep 绿色低碳技术分支 IPC分类 参考关键词 ren 参考关键词 筛选表达式 gen 技术分支编号 = ustrregexs(1) if ustrregexm(绿色低碳技术分支, "(.*\d)\s") carryforward 技术分支编号, replace drop 绿色低碳技术分支 gen v1 = ustrregexs(0) if ustrregexm(IPC分类, "\n") replace IPC分类 = subinstr(IPC分类, v1, " ", .) drop v1 dropifmi(IPC分类) & mi(筛选表达式) replace IPC分类 = subinstr(IPC分类, " ", "", .) order 技术分支编号 split IPC分类, parse(,) drop IPC分类 gen id = _n gather IPC分类* gsort id replace 筛选表达式 = ""if 筛选表达式 == "无" dropvar dropifmi(value) order id replace 技术分支编号 = subinstr(技术分支编号, " ", "", .) ren value 分类号 replace 筛选表达式 = "1 == 1"ifmi(筛选表达式) mergem:1 技术分支编号 using 绿色低碳技术专利IPC对照表 keepif _m == 3 keep 筛选表达式 技术分支编号 分类号 绿色低碳技术ID gen len = strlen(分类号) save data2, replace
根据 len 拆分:
use data2, clear keepif len == 3 drop len ren 分类号 IPC save bfres3, replace
use data2, clear keepif len == 4 drop len ren 分类号 IPC save bfres4, replace
use data2, clear keepif len == 5 drop len ren 分类号 IPC save bfres5, replace
use data2, clear keepif len == 6 drop len ren 分类号 IPC save bfres6, replace
use data2, clear keepifinlist(len, 8, 9, 10) drop len ren 分类号 IPC save bfres7, replace
然后就可以分别把这些 bfres* 文件匹配到 待筛选部分涉及.dta 上了:
use 待筛选部分涉及, clear gen IPC = substr(分类号, 1, 3) recast str300 IPC joinby IPC using bfres3 duplicatesdrop _all, force keepif `=筛选表达式[_n]' keep newzlid 绿色低碳技术ID save 部分涉及第1部分, replace
use 待筛选部分涉及, clear gen IPC = substr(分类号, 1, 4) recast str300 IPC joinby IPC using bfres4 duplicatesdrop _all, force keepif `=筛选表达式[_n]' keep newzlid 绿色低碳技术ID save 部分涉及第2部分, replace
use 待筛选部分涉及, clear gen IPC = substr(分类号, 1, 5) recast str300 IPC joinby IPC using bfres5 duplicatesdrop _all, force keepif `=筛选表达式[_n]' keep newzlid 绿色低碳技术ID save 部分涉及第3部分, replace
use 待筛选部分涉及, clear gen IPC = substr(分类号, 1, 6) recast str300 IPC joinby IPC using bfres6 duplicatesdrop _all, force keepif `=筛选表达式[_n]' keep newzlid 绿色低碳技术ID save 部分涉及第4部分, replace
use 待筛选部分涉及, clear gen IPC = 分类号 recast str300 IPC joinby IPC using bfres7 duplicatesdrop _all, force keepif `=筛选表达式[_n]' keep newzlid 绿色低碳技术ID save 部分涉及第5部分, replace
*- 合并结果 use 部分涉及第1部分, clear forval i = 2/5 { append using 部分涉及第`i'部分 } duplicatesdrop _all, force save"部分涉及筛选结果", replace
合并全部涉及和部分涉及的结果就是所有的绿色低碳专利了。
use 全部涉及筛选结果, clear append using 部分涉及筛选结果 keep newzlid 绿色低碳技术ID duplicatesdrop _all, force mergem:1 绿色低碳技术ID using 绿色低碳技术专利IPC对照表 dropif _m == 2 drop _m drop *涉及 mergem:1 newzlid using 2010年专利申请数据 keepif _m == 3 drop _m save"2010年绿色低碳专利", replace
评论