Snapshot: full project state
This commit is contained in:
107
.case-verify/harvest_snippets.py
Normal file
107
.case-verify/harvest_snippets.py
Normal file
@@ -0,0 +1,107 @@
|
||||
import json, urllib.request, urllib.parse, time, os
|
||||
|
||||
UA = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"}
|
||||
OUT = "/Users/drjones/astraea-books/.case-verify/snippets"
|
||||
os.makedirs(OUT, exist_ok=True)
|
||||
|
||||
def search(q, court=None, n=4):
|
||||
qq = urllib.parse.quote(q)
|
||||
url = f"https://www.courtlistener.com/api/rest/v4/search/?q={qq}&type=o&format=json"
|
||||
if court:
|
||||
url += f"&court={court}"
|
||||
for i in range(4):
|
||||
try:
|
||||
req = urllib.request.Request(url, headers=UA)
|
||||
with urllib.request.urlopen(req, timeout=40) as r:
|
||||
return json.loads(r.read())
|
||||
except Exception as e:
|
||||
if i == 3:
|
||||
return {"error": str(e)}
|
||||
time.sleep(5 + i * 5)
|
||||
|
||||
CASES = {
|
||||
"Littlefield": ("wash", ["Littlefield commingle trace separate property",
|
||||
"Littlefield \"clear and satisfactory\" evidence trace",
|
||||
"Littlefield reverse commingling burden"]),
|
||||
"Kovacs": ("wash", ["Kovacs marriage transmutation separate property",
|
||||
"Kovacs marriage characterization acquisition",
|
||||
"Kovacs marriage clear and convincing community"]),
|
||||
"Chumbley": ("wash", ["Chumbley marriage separate contribution appreciation",
|
||||
"Chumbley marriage tracing formula community interest",
|
||||
"Chumbley marriage commingling acquisition"]),
|
||||
"Short": ("wash", ["Short marriage transmutation separate property",
|
||||
"Short marriage characterization 61176-9",
|
||||
"Short marriage community presumption tracing"]),
|
||||
"Borghi": ("wash", ["Borghi estate community property presumption",
|
||||
"Borghi Gilroy separate property tracing",
|
||||
"Borghi estate clear and convincing"]),
|
||||
"Elam": ("wash", ["Elam marriage characterization acquisition gift",
|
||||
"Elam marriage transmutation separate property",
|
||||
"Elam marriage presumption community burden"]),
|
||||
"Konzen": ("wash", ["Konzen marriage characterization acquisition date",
|
||||
"Konzen marriage separate community funds",
|
||||
"Konzen marriage transmutation"]),
|
||||
"Skarbek": ("washctapp", ["Skarbek marriage transmutation inheritance",
|
||||
"Skarbek marriage separate property intent",
|
||||
"Skarbek marriage commingling community"]),
|
||||
"PearsonMaines": ("washctapp", ["Pearson-Maines transmutation intent",
|
||||
"Pearson-Maines separate property joint tenancy",
|
||||
"Pearson-Maines marriage gift presumption"]),
|
||||
"Olivares": ("washctapp", ["Olivares transmutation separate property",
|
||||
"Olivares marriage joint tenancy intent",
|
||||
"Olivares marriage characterization"]),
|
||||
"Sedlock": ("washctapp", ["Sedlock transmutation community property",
|
||||
"Sedlock marriage separate property agreement",
|
||||
"Sedlock marriage characterization"]),
|
||||
"Glorfield": ("washctapp", ["Glorfield transmutation separate property",
|
||||
"Glorfield marriage community intent",
|
||||
"Glorfield marriage characterization"]),
|
||||
"Hadley": ("wash", ["Hadley marriage separate property division",
|
||||
"Hadley marriage 88 Wash.2d 649",
|
||||
"Hadley marriage just and equitable"]),
|
||||
"Schwarz": ("washctapp", ["Schwarz v. Schwarz separate property mortgage community",
|
||||
"Schwarz marriage commingling tracing",
|
||||
"Schwarz marriage reimbursement community funds"]),
|
||||
"Kraft": ("wash", ["Kraft marriage separate property division dissolution",
|
||||
"Kraft marriage 119 Wash.2d 438",
|
||||
"Kraft marriage exceptional circumstances"]),
|
||||
"Berol": ("wash", ["Berol v. Berol transmutation community property",
|
||||
"Berol separate property deed community",
|
||||
"Berol v. Berol characterization"]),
|
||||
"Brewer": ("wash", ["Brewer marriage separate property division",
|
||||
"Brewer marriage just and equitable property",
|
||||
"Brewer marriage 137 Wash.2d"]),
|
||||
"Mueller": ("washctapp", ["Mueller marriage commingling trace separate",
|
||||
"Mueller marriage \"clear and satisfactory\"",
|
||||
"Mueller marriage Littlefield tracing"]),
|
||||
}
|
||||
|
||||
allout = {}
|
||||
for name, (court, queries) in CASES.items():
|
||||
snippets = []
|
||||
for q in queries:
|
||||
d = search(q, court)
|
||||
if "error" in d:
|
||||
snippets.append({"q": q, "err": d["error"]})
|
||||
continue
|
||||
for res in d.get("results", []):
|
||||
cn = (res.get("caseName") or "").lower()
|
||||
if name.lower().split("maines")[0].split("schwarz")[0].split("berol")[0] not in cn and name.lower() not in cn:
|
||||
continue
|
||||
sn = res.get("opinions", [{}])[0].get("snippet", "")
|
||||
if len(sn) > 200:
|
||||
snippets.append({"q": q, "case": res.get("caseName"), "date": res.get("dateFiled"),
|
||||
"cit": res.get("citation", [])[:2], "snip": sn})
|
||||
break
|
||||
time.sleep(2)
|
||||
allout[name] = snippets
|
||||
print(f"=== {name}: {len(snippets)} snippets")
|
||||
for s in snippets[:3]:
|
||||
if "err" in s:
|
||||
print(" ERR", s["err"]); continue
|
||||
print(" Q:", s["q"])
|
||||
print(" ", s["case"], "|", s["date"], "|", s["cit"])
|
||||
time.sleep(2)
|
||||
|
||||
json.dump(allout, open(f"{OUT}/harvest1.json", "w"), indent=1)
|
||||
print("saved harvest1.json")
|
||||
Reference in New Issue
Block a user