-
Notifications
You must be signed in to change notification settings - Fork 1
/
utils.py
63 lines (48 loc) · 1.59 KB
/
utils.py
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
61
62
63
'''
utility functions
'''
import spacy
from collections import Counter
from spacy.tokenizer import Tokenizer
BOILERPLATE = 'System shall provide the user with the ability to {} {} {}'
def tokenize(path):
"""
Tokenize every line in a file
:param path: path to file
:return: an array of tokens
"""
nlp = spacy.load('en_core_web_sm')
tokenizes = []
with open(path) as f:
for line in f.readlines():
tokenizer = Tokenizer(nlp.vocab)
tokens = [token.text for token in tokenizer(line.replace('system should ', '').replace('\n', ''))]
tokenizes.append(tokens)
return tokenizes
def make_requirements(elements):
"""
make a requirement from boilerplate elements
:param elements: DataFrame containing verb, object, and additional information of a requirement
:return: a list of requirements created by combining elements value
"""
verbs = []
objs = []
details = []
for df in elements:
for _, row in df.iterrows():
verbs.append(row['verb'])
objs.append(row['object'])
details.append(row['detail'])
requirements = []
for i in range(len(verbs)):
for j in range(len(objs)):
for k in range(len(details)):
if i != j and j != k:
requirements.append(make_requirement(verbs[i], objs[j], details[k]))
return requirements
def make_requirement(verb, obj, detail):
return BOILERPLATE.format(verb, obj, detail)
# c = Counter()
# for line in open('f').splitlines():
# c.update(line.split())
# print(c)