-
Notifications
You must be signed in to change notification settings - Fork 27
Expand file tree
/
Copy pathfeatures.py
More file actions
72 lines (61 loc) · 1.61 KB
/
Copy pathfeatures.py
File metadata and controls
72 lines (61 loc) · 1.61 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
61
62
63
64
65
66
67
68
69
70
71
72
import numpy as np
import pandas as pd
ext_map = {
"Objective-C": {"m", "mm"},
"Java": {"java", "jsp", "jspf"},
"Scala": {"scala"},
"C/C++": {
"c",
"cc",
"cxx",
"cpp",
"hpp",
"c++",
"h",
"hh",
"cppm",
"ixx",
"cp",
"inl",
},
"Groovy": {"groovy"},
"PHP": {"php", "tpl", "inc", "ctp", "phpt", "phtml"},
"JavaScript": {"js", "jsx", "coffee"},
"Python": {"py"},
"Config files": {"lock", "gradle", "json", "config", "yaml", "conf"},
"Ruby": {"rb"},
"HTML": {"html", "erb"},
"Perl": {"pm"},
"Go": {"go"},
"Lua": {"lua"},
"Erlang": {"erl"},
"C#": {"cs"},
"Rust": {"rust"},
"Vala": {"vala"},
"SQL": {"sql"},
"XML": {"xml"},
"Shell": {"sh"},
}
def get_extension(file):
return file.split(".")[-1].lower()
def get_files_extension(files):
extensions = set(
[get_extension(file) for file in eval(files).keys() if len(file.split(".")) > 1]
)
return extensions if len(extensions) > 0 else np.nan
def get_key(val):
for key, value in ext_map.items():
if val in value:
return key
def get_language(extensions):
if not pd.notna(extensions):
return np.nan
languages = set([get_key(ext) for ext in extensions if get_key(ext) != None])
return languages if len(languages) > 0 else np.nan
def add(files):
files = eval(files)
for file in files.keys():
extension = get_extension(file)
files[file]["extensions"] = extension
files[file]["language"] = get_key(extension)
return files