Cannot be used in Pipeline
| 144 | |
| 145 | # Extract the title/descrption/comments/priority/type for jira issues and 'text'/'frc' for fs patches |
| 146 | class FeatureLabelExtractor(BaseEstimator, TransformerMixin): |
| 147 | """Cannot be used in Pipeline""" |
| 148 | |
| 149 | def __init__(self, datasets, text_feature, label_func, file_filter, is_jira): |
| 150 | self.datasets = datasets |
| 151 | self.text_feature = text_feature |
| 152 | self.label_func = label_func |
| 153 | self.file_filter = file_filter |
| 154 | self.is_jira = is_jira |
| 155 | |
| 156 | def fit(self, X, y=None): |
| 157 | return self |
| 158 | |
| 159 | def jira_issue_transform(self, project_list, use_description, use_comment): |
| 160 | num_samples = sum([ |
| 161 | sum([1 for issue in self.datasets[fs] if self.file_filter(issue)]) |
| 162 | for fs in project_list]) |
| 163 | |
| 164 | features = {} |
| 165 | features['text'] = [None] * num_samples |
| 166 | labels = [None] * num_samples |
| 167 | ind = 0 |
| 168 | for project in project_list: |
| 169 | for issue_id, issue in self.datasets[project].items(): |
| 170 | if self.file_filter(issue): |
| 171 | features['text'][ind] = issue[self.text_feature] |
| 172 | if use_description and 'description' not in self.text_feature: |
| 173 | features['text'][ind] = issue[self.text_feature] + issue['description'].strip() |
| 174 | if use_comment and 'comment' not in self.text_feature: |
| 175 | features['text'][ind] = issue[self.text_feature] + issue['comment'].strip() |
| 176 | if use_description and use_comment: |
| 177 | features['text'][ind] = issue[self.text_feature] + issue['description'].strip() + issue['comment'].strip() |
| 178 | labels[ind] = self.label_func(issue, self.is_jira) |
| 179 | ind += 1 |
| 180 | return features, labels |
| 181 | |
| 182 | def fs_patch_transform(self, fs_list): |
| 183 | num_samples = sum([ |
| 184 | sum([1 for dp in self.datasets[fs] if self.file_filter(dp)]) |
| 185 | for fs in fs_list]) |
| 186 | |
| 187 | features = {} |
| 188 | features['text'] = [None] * num_samples |
| 189 | features['frc'] = np.zeros((num_samples, 3)) |
| 190 | labels = [None] * num_samples |
| 191 | ind = 0 |
| 192 | for fs in fs_list: |
| 193 | for dp in self.datasets[fs]: |
| 194 | if self.file_filter(dp): |
| 195 | features['text'][ind] = dp[self.text_feature] |
| 196 | features['frc'][ind] = np.array([dp['num_files'], |
| 197 | dp['num_adds'], |
| 198 | dp['num_dels']]) |
| 199 | labels[ind] = self.label_func(dp, self.is_jira) |
| 200 | ind += 1 |
| 201 | return features, labels |
| 202 | |
| 203 | class ItemSelector(BaseEstimator, TransformerMixin): |