我使用tidytext
,tm
和quanteda
进行文本挖掘。
我试着:
tibble
根据法律引文的存在,用经过处理的纯文本过滤 a- 计算每个文本文档的相同引用次数
不幸的是,我不擅长使用特定的正则表达式。
这是一段显示典型的法律引用的段落:
4.1。Die selbstständige Tätigkeit als Arzt oder Ärztin bedarf einer Bewilligung des Kantons, auf dessen Gebiet sie ausgeübt wird (Art. 34 MedBG)。Die Bewilligung wird erteilt, wenn die gesuchstellende Person ein entsprechendes eidgenössisches Diplom besitzt (Art. 36 Abs. 1 lit. a MedBG) und vertrauenswürdig ist sowie physisch und psychisch Gewähr für eine einwandfreie Berufsausübung bietlitt (Art. 36 Abs. b 1 1 MedBG) )。Die Bewilligung wird entzogen, wenn ihre Voraussetzungen nicht mehr erfüllt sind oder nachträglich Tatsachen festgestellt werden, auf Grund derer sie hätte verweigert werden müssen (Art. 36 MedBG)。
瑞士法律的一般结构如下(https://www.admin.ch/opc/de/classified-compilation/20040265/index.html):
- 文章(Art. x,而 x 是一个数字)
- 段落(绝对 x,而 x 是一个数字)
- 字母(lit. x,而 xia 小写字母)
- 根据法典的不同,可能会出现更多子标题,例如“Satz 2”,
- 法典(混合大小写字母)
此外,2-4 不是强制性的,也可以组合,例如:
艺术 34. MedBG
艺术。42 腹肌。2 和 100 绝对值。1个医学BG
即使很难有一个正则表达式来指定给定条款和法典的每个子结构,(有数百个,其中许多在 2. - 4 中有微小差异)......如果你有知道如何自动执行此操作,请告诉我;D)我只对《法律条文》和《法典》感兴趣(在这种情况下为第 1-67 条和 MedBG)
我的方法
我通过删除高大的字母和标点符号来清理文本,并使用tolower
andtm::removePunctuation
回到整洁的数据tidytext::tidy()
> head(docs_tidy %>% select(id,text))
# A tibble: 5 x 2
id text
<chr> <chr>
1 31.12.2015_9C_911_2015 "\n \n \nbundesgericht \ntribunal fédéral \ntribunale federale \ntribunal federal \n \n \n\n \n \n ~
2 31.12.2015_9C_910_2015 "\n \n \nbundesgericht \ntribunal fédéral \ntribunale federale \ntribunal federal \n \n \n\n \n \n ~
3 31.12.2015_9C_934_2015 "\n \n \nbundesgericht \ntribunal fédéral \ntribunale federale \ntribunal federal \n \n \n\n \n \n ~
4 31.12.2014_9C_904_2014 "\n \n \nbundesgericht \ntribunal fédéral \ntribunale federale \ntribunal federal \n \n \n\n \n \n ~
5 31.12.2014_9C_907_2014 "\n \n \nbundesgericht \ntribunal fédéral \ntribunale federale \ntribunal federal \n \n \n\n \n \n ~
我想念的东西: 我想到了一个搜索 1(文章)并跳过表达式从 2-4 直到它达到 5(法典)的正则表达式。
艺术 1.(识别 2-4 中不必要项目的代码(例如 abs. 1 100){0,直到达到 medbg}medbg
如果无法在特定点停止它,它可以在跳过大约 8 个项目后停止(这是我在 1. 和 5 之间期望的最大值。)
lawCitation <- c("art. 1 medbg","art. 42 abs. 2 und 100 abs. 1 medbg","art. 1 abs. 1 lit a medbg","art. 36 abs. 1 lit. b medbg","art. 1 satz 2 bgg und abs. 1 lit a lit b","art. 22 totally random number 21 medbg")
grepl("REGEX",lawCitation)
为art. 1
并且medbg
应该返回TRUE FALSE TRUE FALSE FALSE FALSE
如果我有一个好的正则表达式,我会这样继续:
# search docs for speficic Article from a specific Code of Law
dplyr::filter(docs_tidy, grepl("REGEX",text)) -> filtered
# count n of citations
filtered %>% group_by(id) %>% mutate(citations=length(grep("REGEX",.)
或者我会尝试编写一个函数来搜索我tibble
的 medbg 的所有文章(第 1-67 条)并计算它们。