-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprocess_lingfeat.py
More file actions
60 lines (49 loc) · 2.33 KB
/
Copy pathprocess_lingfeat.py
File metadata and controls
60 lines (49 loc) · 2.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import sys, os
# os.environ['CUDA_VISIBLE_DEVICES'] = ''
from lingfeat import extractor
from datasets import load_from_disk
import logging
# import torch
# torch.multiprocessing.set_start_method('spawn')
dataset = sys.argv[1]
data = load_from_disk(dataset)
# LF = extractor.pass_text(data['train']['sentence1'][0])
# LF.preprocess()
# LF.PhrF_()
# logging.getLogger('stanza').setLevel(30)
def extract_lingfeat(row, input_col, output_col):
if output_col in row and len(row[output_col]) != 1:
return {output_col: row[output_col]}
text = row[input_col]
LingFeat = extractor.pass_text(text)
LingFeat.preprocess()
d = {}
d.update(LingFeat.WoKF_()) # Wikipedia Knowledge Features
d.update(LingFeat.WBKF_()) # WeeBit Corpus Knowledge Features
d.update(LingFeat.OSKF_()) # OneStopEng Corpus Knowledge Features
# Discourse (Disco) Features
d.update(LingFeat.EnDF_()) # Entity Density Features
d.update(LingFeat.EnGF_()) # Entity Grid Features
# Syntactic (Synta) Features
# d.update(LingFeat.PhrF_()) # Noun/Verb/Adj/Adv/... Phrasal Features (logging stanza)
# d.update(LingFeat.TrSF_()) # (Parse) Tree Structural Features (logging stanza)
d.update(LingFeat.POSF_()) # Noun/Verb/Adj/Adv/... Part-of-Speech Features
# Lexico Semantic (LxSem) Features
d.update(LingFeat.TTRF_()) # Type Token Ratio Features
d.update(LingFeat.VarF_()) # Noun/Verb/Adj/Adv Variation Features
d.update(LingFeat.PsyF_()) # Psycholinguistic Difficulty of Words (AoA Kuperman)
d.update(LingFeat.WorF_()) # Word Familiarity from Frequency Count (SubtlexUS)
# Shallow Traditional (ShTra) Features
d.update(LingFeat.ShaF_()) # Shallow Features (e.g. avg number of tokens)
d.update(LingFeat.TraF_()) # Traditional Formulas
return {output_col: list(d.values())}
if 'sentence1' in data['train'].column_names:
data = data.map(extract_lingfeat, num_proc=30,
fn_kwargs={'input_col': 'sentence1', 'output_col': 'sentence1_lingfeat'})
data = data.map(extract_lingfeat, num_proc=30,
fn_kwargs={'input_col': 'sentence2', 'output_col': 'sentence2_lingfeat'})
elif 'sentence' in data['train'].column_names:
data = data.map(extract_lingfeat, num_proc=100,
fn_kwargs={'input_col': 'sentence', 'output_col': 'sentence_lingfeat'})
print(data)
data.save_to_disk(dataset)