arekit 0.23.1__py3-none-any.whl → 0.25.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. arekit/common/context/terms_mapper.py +2 -2
  2. arekit/common/data/const.py +5 -4
  3. arekit/common/{experiment/api/ops_doc.py → data/doc_provider.py} +1 -1
  4. arekit/common/data/input/providers/columns/sample.py +6 -1
  5. arekit/common/data/input/providers/instances/base.py +1 -1
  6. arekit/common/data/input/providers/rows/base.py +36 -13
  7. arekit/common/data/input/providers/rows/samples.py +57 -55
  8. arekit/common/data/input/providers/sample/cropped.py +2 -2
  9. arekit/common/data/input/sample.py +1 -1
  10. arekit/common/data/rows_fmt.py +82 -0
  11. arekit/common/data/rows_parser.py +43 -0
  12. arekit/common/data/storages/base.py +23 -18
  13. arekit/common/data/views/samples.py +2 -8
  14. arekit/common/{news → docs}/base.py +2 -2
  15. arekit/common/{news → docs}/entities_grouping.py +2 -1
  16. arekit/common/{news → docs}/entity.py +2 -1
  17. arekit/common/{news → docs}/parsed/base.py +5 -5
  18. arekit/common/docs/parsed/providers/base.py +68 -0
  19. arekit/common/{news → docs}/parsed/providers/base_pairs.py +2 -2
  20. arekit/common/{news → docs}/parsed/providers/entity_service.py +27 -22
  21. arekit/common/{news → docs}/parsed/providers/opinion_pairs.py +2 -2
  22. arekit/common/{news → docs}/parsed/providers/text_opinion_pairs.py +6 -6
  23. arekit/common/docs/parsed/service.py +31 -0
  24. arekit/common/docs/parser.py +66 -0
  25. arekit/common/{news → docs}/sentence.py +1 -1
  26. arekit/common/entities/base.py +11 -2
  27. arekit/common/experiment/api/base_samples_io.py +1 -1
  28. arekit/common/frames/variants/collection.py +2 -2
  29. arekit/common/linkage/base.py +2 -2
  30. arekit/common/linkage/meta.py +23 -0
  31. arekit/common/linkage/opinions.py +1 -1
  32. arekit/common/linkage/text_opinions.py +2 -2
  33. arekit/common/opinions/annot/algo/base.py +1 -1
  34. arekit/common/opinions/annot/algo/pair_based.py +15 -13
  35. arekit/common/opinions/annot/algo/predefined.py +4 -4
  36. arekit/common/opinions/annot/algo_based.py +5 -5
  37. arekit/common/opinions/annot/base.py +3 -3
  38. arekit/common/opinions/base.py +7 -7
  39. arekit/common/opinions/collection.py +3 -3
  40. arekit/common/pipeline/base.py +12 -16
  41. arekit/common/pipeline/batching.py +28 -0
  42. arekit/common/pipeline/context.py +5 -1
  43. arekit/common/pipeline/items/base.py +38 -1
  44. arekit/common/pipeline/items/flatten.py +5 -1
  45. arekit/common/pipeline/items/handle.py +2 -1
  46. arekit/common/pipeline/items/iter.py +2 -1
  47. arekit/common/pipeline/items/map.py +2 -1
  48. arekit/common/pipeline/items/map_nested.py +4 -0
  49. arekit/common/pipeline/utils.py +32 -0
  50. arekit/common/service/sqlite.py +36 -0
  51. arekit/common/synonyms/base.py +2 -2
  52. arekit/common/text/{partitioning/str.py → partitioning.py} +16 -11
  53. arekit/common/text_opinions/base.py +11 -11
  54. arekit/common/utils.py +33 -46
  55. arekit/contrib/networks/embedding.py +3 -3
  56. arekit/contrib/networks/embedding_io.py +5 -5
  57. arekit/contrib/networks/input/const.py +0 -2
  58. arekit/contrib/networks/input/providers/sample.py +15 -29
  59. arekit/contrib/networks/input/rows_parser.py +47 -134
  60. arekit/contrib/prompt/sample.py +18 -16
  61. arekit/contrib/utils/data/contents/opinions.py +17 -5
  62. arekit/contrib/utils/data/doc_provider/dict_based.py +13 -0
  63. arekit/contrib/utils/data/{doc_ops → doc_provider}/dir_based.py +7 -7
  64. arekit/contrib/utils/data/readers/base.py +3 -0
  65. arekit/contrib/utils/data/readers/csv_pd.py +10 -4
  66. arekit/contrib/utils/data/readers/jsonl.py +3 -0
  67. arekit/contrib/utils/data/readers/sqlite.py +14 -0
  68. arekit/contrib/utils/data/service/balance.py +0 -1
  69. arekit/contrib/utils/data/storages/pandas_based.py +3 -5
  70. arekit/contrib/utils/data/storages/row_cache.py +18 -6
  71. arekit/contrib/utils/data/storages/sqlite_based.py +17 -0
  72. arekit/contrib/utils/data/writers/base.py +5 -0
  73. arekit/contrib/utils/data/writers/csv_native.py +3 -0
  74. arekit/contrib/utils/data/writers/csv_pd.py +3 -0
  75. arekit/contrib/utils/data/writers/json_opennre.py +31 -13
  76. arekit/contrib/utils/data/writers/sqlite_native.py +114 -0
  77. arekit/contrib/utils/io_utils/embedding.py +25 -33
  78. arekit/contrib/utils/io_utils/utils.py +3 -24
  79. arekit/contrib/utils/pipelines/items/sampling/base.py +31 -26
  80. arekit/contrib/utils/pipelines/items/sampling/networks.py +7 -10
  81. arekit/contrib/utils/pipelines/items/text/entities_default.py +2 -2
  82. arekit/contrib/utils/pipelines/items/text/frames.py +2 -3
  83. arekit/contrib/utils/pipelines/items/text/frames_lemmatized.py +3 -3
  84. arekit/contrib/utils/pipelines/items/text/frames_negation.py +2 -1
  85. arekit/contrib/utils/pipelines/items/text/tokenizer.py +3 -5
  86. arekit/contrib/utils/pipelines/items/text/translator.py +136 -0
  87. arekit/contrib/utils/pipelines/opinion_collections.py +5 -5
  88. arekit/contrib/utils/pipelines/text_opinion/annot/algo_based.py +7 -7
  89. arekit/contrib/utils/pipelines/text_opinion/extraction.py +34 -22
  90. arekit/contrib/utils/pipelines/text_opinion/filters/base.py +1 -1
  91. arekit/contrib/utils/pipelines/text_opinion/filters/distance_based.py +1 -1
  92. arekit/contrib/utils/pipelines/text_opinion/filters/entity_based.py +3 -3
  93. arekit/contrib/utils/pipelines/text_opinion/filters/limitation.py +4 -4
  94. arekit/contrib/utils/serializer.py +4 -23
  95. arekit-0.25.0.data/data/logo.png +0 -0
  96. arekit-0.25.0.dist-info/METADATA +82 -0
  97. arekit-0.25.0.dist-info/RECORD +259 -0
  98. {arekit-0.23.1.dist-info → arekit-0.25.0.dist-info}/WHEEL +1 -1
  99. arekit/common/data/row_ids/base.py +0 -79
  100. arekit/common/data/row_ids/binary.py +0 -38
  101. arekit/common/data/row_ids/multiple.py +0 -14
  102. arekit/common/folding/base.py +0 -36
  103. arekit/common/folding/fixed.py +0 -42
  104. arekit/common/folding/nofold.py +0 -15
  105. arekit/common/folding/united.py +0 -46
  106. arekit/common/news/objects_parser.py +0 -37
  107. arekit/common/news/parsed/providers/base.py +0 -48
  108. arekit/common/news/parsed/service.py +0 -31
  109. arekit/common/news/parser.py +0 -34
  110. arekit/common/text/parser.py +0 -12
  111. arekit/common/text/partitioning/__init__.py +0 -0
  112. arekit/common/text/partitioning/base.py +0 -4
  113. arekit/common/text/partitioning/terms.py +0 -35
  114. arekit/contrib/source/__init__.py +0 -0
  115. arekit/contrib/source/brat/__init__.py +0 -0
  116. arekit/contrib/source/brat/annot.py +0 -83
  117. arekit/contrib/source/brat/entities/__init__.py +0 -0
  118. arekit/contrib/source/brat/entities/compound.py +0 -33
  119. arekit/contrib/source/brat/entities/entity.py +0 -42
  120. arekit/contrib/source/brat/entities/parser.py +0 -53
  121. arekit/contrib/source/brat/news.py +0 -28
  122. arekit/contrib/source/brat/opinions/__init__.py +0 -0
  123. arekit/contrib/source/brat/opinions/converter.py +0 -19
  124. arekit/contrib/source/brat/relation.py +0 -32
  125. arekit/contrib/source/brat/sentence.py +0 -69
  126. arekit/contrib/source/brat/sentences_reader.py +0 -128
  127. arekit/contrib/source/download.py +0 -41
  128. arekit/contrib/source/nerel/__init__.py +0 -0
  129. arekit/contrib/source/nerel/entities.py +0 -55
  130. arekit/contrib/source/nerel/folding/__init__.py +0 -0
  131. arekit/contrib/source/nerel/folding/fixed.py +0 -75
  132. arekit/contrib/source/nerel/io_utils.py +0 -62
  133. arekit/contrib/source/nerel/labels.py +0 -241
  134. arekit/contrib/source/nerel/reader.py +0 -46
  135. arekit/contrib/source/nerel/utils.py +0 -24
  136. arekit/contrib/source/nerel/versions.py +0 -12
  137. arekit/contrib/source/nerelbio/__init__.py +0 -0
  138. arekit/contrib/source/nerelbio/io_utils.py +0 -62
  139. arekit/contrib/source/nerelbio/labels.py +0 -265
  140. arekit/contrib/source/nerelbio/reader.py +0 -8
  141. arekit/contrib/source/nerelbio/versions.py +0 -8
  142. arekit/contrib/source/ruattitudes/__init__.py +0 -0
  143. arekit/contrib/source/ruattitudes/collection.py +0 -36
  144. arekit/contrib/source/ruattitudes/entity/__init__.py +0 -0
  145. arekit/contrib/source/ruattitudes/entity/parser.py +0 -7
  146. arekit/contrib/source/ruattitudes/io_utils.py +0 -56
  147. arekit/contrib/source/ruattitudes/labels_fmt.py +0 -12
  148. arekit/contrib/source/ruattitudes/news.py +0 -51
  149. arekit/contrib/source/ruattitudes/news_brat.py +0 -44
  150. arekit/contrib/source/ruattitudes/opinions/__init__.py +0 -0
  151. arekit/contrib/source/ruattitudes/opinions/base.py +0 -28
  152. arekit/contrib/source/ruattitudes/opinions/converter.py +0 -37
  153. arekit/contrib/source/ruattitudes/reader.py +0 -268
  154. arekit/contrib/source/ruattitudes/sentence.py +0 -73
  155. arekit/contrib/source/ruattitudes/synonyms.py +0 -17
  156. arekit/contrib/source/ruattitudes/text_object.py +0 -57
  157. arekit/contrib/source/rusentiframes/__init__.py +0 -0
  158. arekit/contrib/source/rusentiframes/collection.py +0 -157
  159. arekit/contrib/source/rusentiframes/effect.py +0 -24
  160. arekit/contrib/source/rusentiframes/io_utils.py +0 -19
  161. arekit/contrib/source/rusentiframes/labels_fmt.py +0 -22
  162. arekit/contrib/source/rusentiframes/polarity.py +0 -35
  163. arekit/contrib/source/rusentiframes/role.py +0 -15
  164. arekit/contrib/source/rusentiframes/state.py +0 -24
  165. arekit/contrib/source/rusentiframes/types.py +0 -42
  166. arekit/contrib/source/rusentiframes/value.py +0 -2
  167. arekit/contrib/source/rusentrel/__init__.py +0 -0
  168. arekit/contrib/source/rusentrel/const.py +0 -3
  169. arekit/contrib/source/rusentrel/entities.py +0 -26
  170. arekit/contrib/source/rusentrel/io_utils.py +0 -125
  171. arekit/contrib/source/rusentrel/labels_fmt.py +0 -12
  172. arekit/contrib/source/rusentrel/news_reader.py +0 -51
  173. arekit/contrib/source/rusentrel/opinions/__init__.py +0 -0
  174. arekit/contrib/source/rusentrel/opinions/collection.py +0 -30
  175. arekit/contrib/source/rusentrel/opinions/converter.py +0 -40
  176. arekit/contrib/source/rusentrel/opinions/provider.py +0 -54
  177. arekit/contrib/source/rusentrel/opinions/writer.py +0 -42
  178. arekit/contrib/source/rusentrel/synonyms.py +0 -17
  179. arekit/contrib/source/sentinerel/__init__.py +0 -0
  180. arekit/contrib/source/sentinerel/entities.py +0 -52
  181. arekit/contrib/source/sentinerel/folding/__init__.py +0 -0
  182. arekit/contrib/source/sentinerel/folding/factory.py +0 -32
  183. arekit/contrib/source/sentinerel/folding/fixed.py +0 -73
  184. arekit/contrib/source/sentinerel/io_utils.py +0 -87
  185. arekit/contrib/source/sentinerel/labels.py +0 -53
  186. arekit/contrib/source/sentinerel/labels_scaler.py +0 -30
  187. arekit/contrib/source/sentinerel/reader.py +0 -42
  188. arekit/contrib/source/synonyms/__init__.py +0 -0
  189. arekit/contrib/source/synonyms/utils.py +0 -19
  190. arekit/contrib/source/zip_utils.py +0 -47
  191. arekit/contrib/utils/bert/rows.py +0 -0
  192. arekit/contrib/utils/bert/text_b_rus.py +0 -18
  193. arekit/contrib/utils/connotations/__init__.py +0 -0
  194. arekit/contrib/utils/connotations/rusentiframes_sentiment.py +0 -23
  195. arekit/contrib/utils/cv/__init__.py +0 -0
  196. arekit/contrib/utils/cv/doc_stat/__init__.py +0 -0
  197. arekit/contrib/utils/cv/doc_stat/base.py +0 -37
  198. arekit/contrib/utils/cv/doc_stat/sentence.py +0 -12
  199. arekit/contrib/utils/cv/splitters/__init__.py +0 -0
  200. arekit/contrib/utils/cv/splitters/base.py +0 -4
  201. arekit/contrib/utils/cv/splitters/default.py +0 -53
  202. arekit/contrib/utils/cv/splitters/statistical.py +0 -57
  203. arekit/contrib/utils/cv/two_class.py +0 -77
  204. arekit/contrib/utils/data/doc_ops/__init__.py +0 -0
  205. arekit/contrib/utils/data/doc_ops/dict_based.py +0 -13
  206. arekit/contrib/utils/data/ext.py +0 -31
  207. arekit/contrib/utils/data/views/__init__.py +0 -0
  208. arekit/contrib/utils/data/views/linkages/__init__.py +0 -0
  209. arekit/contrib/utils/data/views/linkages/base.py +0 -58
  210. arekit/contrib/utils/data/views/linkages/multilabel.py +0 -48
  211. arekit/contrib/utils/data/views/linkages/utils.py +0 -24
  212. arekit/contrib/utils/data/views/opinions.py +0 -14
  213. arekit/contrib/utils/download.py +0 -78
  214. arekit/contrib/utils/entities/formatters/str_rus_cased_fmt.py +0 -78
  215. arekit/contrib/utils/entities/formatters/str_rus_nocased_fmt.py +0 -15
  216. arekit/contrib/utils/entities/formatters/str_simple_fmt.py +0 -24
  217. arekit/contrib/utils/entities/formatters/str_simple_uppercase_fmt.py +0 -21
  218. arekit/contrib/utils/io_utils/opinions.py +0 -39
  219. arekit/contrib/utils/io_utils/samples.py +0 -78
  220. arekit/contrib/utils/lexicons/__init__.py +0 -0
  221. arekit/contrib/utils/lexicons/lexicon.py +0 -43
  222. arekit/contrib/utils/lexicons/relation.py +0 -45
  223. arekit/contrib/utils/lexicons/rusentilex.py +0 -34
  224. arekit/contrib/utils/nn/__init__.py +0 -0
  225. arekit/contrib/utils/nn/rows.py +0 -83
  226. arekit/contrib/utils/pipelines/items/sampling/bert.py +0 -5
  227. arekit/contrib/utils/pipelines/items/text/terms_splitter.py +0 -10
  228. arekit/contrib/utils/pipelines/items/to_output.py +0 -101
  229. arekit/contrib/utils/pipelines/sources/__init__.py +0 -0
  230. arekit/contrib/utils/pipelines/sources/nerel/__init__.py +0 -0
  231. arekit/contrib/utils/pipelines/sources/nerel/doc_ops.py +0 -27
  232. arekit/contrib/utils/pipelines/sources/nerel/extract_text_relations.py +0 -59
  233. arekit/contrib/utils/pipelines/sources/nerel/labels_fmt.py +0 -60
  234. arekit/contrib/utils/pipelines/sources/nerel_bio/__init__.py +0 -0
  235. arekit/contrib/utils/pipelines/sources/nerel_bio/doc_ops.py +0 -29
  236. arekit/contrib/utils/pipelines/sources/nerel_bio/extrat_text_relations.py +0 -59
  237. arekit/contrib/utils/pipelines/sources/nerel_bio/labels_fmt.py +0 -79
  238. arekit/contrib/utils/pipelines/sources/ruattitudes/__init__.py +0 -0
  239. arekit/contrib/utils/pipelines/sources/ruattitudes/doc_ops.py +0 -56
  240. arekit/contrib/utils/pipelines/sources/ruattitudes/entity_filter.py +0 -19
  241. arekit/contrib/utils/pipelines/sources/ruattitudes/extract_text_opinions.py +0 -58
  242. arekit/contrib/utils/pipelines/sources/rusentrel/__init__.py +0 -0
  243. arekit/contrib/utils/pipelines/sources/rusentrel/doc_ops.py +0 -21
  244. arekit/contrib/utils/pipelines/sources/rusentrel/extract_text_opinions.py +0 -100
  245. arekit/contrib/utils/pipelines/sources/sentinerel/__init__.py +0 -0
  246. arekit/contrib/utils/pipelines/sources/sentinerel/doc_ops.py +0 -29
  247. arekit/contrib/utils/pipelines/sources/sentinerel/entity_filter.py +0 -62
  248. arekit/contrib/utils/pipelines/sources/sentinerel/extract_text_opinions.py +0 -175
  249. arekit/contrib/utils/pipelines/sources/sentinerel/labels_fmt.py +0 -50
  250. arekit/contrib/utils/pipelines/text_opinion/annot/predefined.py +0 -88
  251. arekit/contrib/utils/resources.py +0 -26
  252. arekit/contrib/utils/sources/__init__.py +0 -0
  253. arekit/contrib/utils/sources/sentinerel/__init__.py +0 -0
  254. arekit/contrib/utils/sources/sentinerel/text_opinion/__init__.py +0 -0
  255. arekit/contrib/utils/sources/sentinerel/text_opinion/prof_per_org_filter.py +0 -63
  256. arekit/contrib/utils/utils_folding.py +0 -19
  257. arekit/download_data.py +0 -11
  258. arekit-0.23.1.dist-info/METADATA +0 -23
  259. arekit-0.23.1.dist-info/RECORD +0 -403
  260. /arekit/common/{data/row_ids → docs}/__init__.py +0 -0
  261. /arekit/common/{folding → docs/parsed}/__init__.py +0 -0
  262. /arekit/common/{news → docs/parsed/providers}/__init__.py +0 -0
  263. /arekit/common/{news → docs}/parsed/term_position.py +0 -0
  264. /arekit/common/{news/parsed → service}/__init__.py +0 -0
  265. /arekit/{common/news/parsed/providers → contrib/utils/data/doc_provider}/__init__.py +0 -0
  266. {arekit-0.23.1.dist-info → arekit-0.25.0.dist-info}/LICENSE +0 -0
  267. {arekit-0.23.1.dist-info → arekit-0.25.0.dist-info}/top_level.txt +0 -0
@@ -1,53 +0,0 @@
1
- from arekit.common.news.objects_parser import SentenceObjectsParserPipelineItem
2
- from arekit.common.pipeline.context import PipelineContext
3
- from arekit.common.text.partitioning.str import StringPartitioning
4
- from arekit.common.text.partitioning.terms import TermsPartitioning
5
- from arekit.contrib.source.brat.sentence import BratSentence
6
-
7
-
8
- class BratTextEntitiesParser(SentenceObjectsParserPipelineItem):
9
-
10
- KEY = "sentence"
11
-
12
- ################################
13
- # NOTE: Supported partitionings.
14
- ################################
15
- # By default, BRAT annotation proposes to adopt entities annotation
16
- # based on string input, which means that entity ends described as
17
- # `char-ind-begin` and `char-ind-end`. However, the latter could be
18
- # expanded to list of terms, which means that we deal with `ind-begin`
19
- # and `ind-end` list indices.
20
- __supported_partitionings = {
21
- "string": StringPartitioning(),
22
- "terms": TermsPartitioning()
23
- }
24
-
25
- def __init__(self, partitioning="string"):
26
- assert(isinstance(partitioning, str))
27
- super(BratTextEntitiesParser, self).__init__(self.__supported_partitionings[partitioning])
28
-
29
- # region protected methods
30
-
31
- def _get_text(self, pipeline_ctx):
32
- sentence = self.__get_sentence(pipeline_ctx)
33
- return sentence.Text
34
-
35
- def _get_parts_provider_func(self, input_data, pipeline_ctx):
36
- sentence = self.__get_sentence(pipeline_ctx)
37
- return self.__iter_subs_values_with_bounds(sentence)
38
-
39
- # endregion
40
-
41
- # region private methods
42
-
43
- def __get_sentence(self, pipeline_ctx):
44
- assert(isinstance(pipeline_ctx, PipelineContext))
45
- assert(self.KEY in pipeline_ctx)
46
- return pipeline_ctx.provide(self.KEY)
47
-
48
- @staticmethod
49
- def __iter_subs_values_with_bounds(sentence):
50
- assert(isinstance(sentence, BratSentence))
51
- return sentence.iter_entity_with_local_bounds()
52
-
53
- # endregion
@@ -1,28 +0,0 @@
1
- from arekit.common.news.base import News
2
- from arekit.contrib.source.brat.entities.entity import BratEntity
3
- from arekit.contrib.source.brat.sentence import BratSentence
4
-
5
-
6
- class BratNews(News):
7
-
8
- def __init__(self, doc_id, sentences, text_relations):
9
- assert(isinstance(text_relations, list) or text_relations is None)
10
- super(BratNews, self).__init__(doc_id=doc_id, sentences=sentences)
11
- self.__text_relations = text_relations
12
- self.__entity_by_id = {}
13
- for sentence in sentences:
14
- assert(isinstance(sentence, BratSentence))
15
- for brat_entity, _ in sentence.iter_entity_with_local_bounds():
16
- assert(isinstance(brat_entity, BratEntity))
17
- self.__entity_by_id[brat_entity.ID] = brat_entity
18
-
19
- @property
20
- def Relations(self):
21
- for brat_relation in self.__text_relations:
22
- yield brat_relation
23
-
24
- def contains_entity(self, entity_id):
25
- return entity_id in self.__entity_by_id
26
-
27
- def get_entity_by_id(self, entity_id):
28
- return self.__entity_by_id[entity_id]
File without changes
@@ -1,19 +0,0 @@
1
- from arekit.common.labels.str_fmt import StringLabelsFormatter
2
- from arekit.common.text_opinions.base import TextOpinion
3
- from arekit.contrib.source.brat.relation import BratRelation
4
-
5
-
6
- class BratRelationConverter(object):
7
-
8
- @staticmethod
9
- def to_text_opinion(brat_relation, doc_id, label_formatter):
10
- """ Converts opinion into document-level referenced opinion
11
- """
12
- assert (isinstance(brat_relation, BratRelation))
13
- assert(isinstance(label_formatter, StringLabelsFormatter))
14
-
15
- return TextOpinion(doc_id=doc_id,
16
- text_opinion_id=int(brat_relation.ID),
17
- source_id=brat_relation.SourceID,
18
- target_id=brat_relation.TargetID,
19
- label=label_formatter.str_to_label(brat_relation.Type))
@@ -1,32 +0,0 @@
1
- class BratRelation(object):
2
-
3
- def __init__(self, id_in_doc, source_id, target_id, rel_type):
4
- assert(isinstance(id_in_doc, str))
5
- assert(isinstance(source_id, int))
6
- assert(isinstance(target_id, int))
7
- assert(isinstance(rel_type, str))
8
-
9
- self.__id = id_in_doc
10
- self.__rel_type = rel_type
11
- self.__source_id = source_id
12
- self.__target_id = target_id
13
-
14
- @property
15
- def ID(self):
16
- return self.__id
17
-
18
- @property
19
- def Type(self):
20
- return self.__rel_type
21
-
22
- @property
23
- def SourceID(self):
24
- """ Arg0.
25
- """
26
- return self.__source_id
27
-
28
- @property
29
- def TargetID(self):
30
- """ Arg1.
31
- """
32
- return self.__target_id
@@ -1,69 +0,0 @@
1
- from functools import cmp_to_key
2
-
3
- from arekit.common.bound import Bound
4
- from arekit.common.news.sentence import BaseNewsSentence
5
- from arekit.contrib.source.brat.entities.compound import BratCompoundEntity
6
- from arekit.contrib.source.brat.entities.entity import BratEntity
7
-
8
-
9
- class BratSentence(BaseNewsSentence):
10
- """ Represent a raw sentence of BRAT.
11
- Provides text could be used to parse then.
12
- Provides API to store entities.
13
- """
14
-
15
- def __init__(self, text, index_begin, entities):
16
- """ entities: list of BratEntities
17
- index_begin: int
18
- - char index (in case of string type of `text`)
19
- - term index (in case of list type of `text`)
20
- """
21
- assert(isinstance(text, str) or isinstance(text, list))
22
- assert(isinstance(index_begin, int))
23
- assert(isinstance(entities, list))
24
- super(BratSentence, self).__init__(text=text)
25
- self.__index_begin = index_begin
26
- self.__entities = entities
27
-
28
- @staticmethod
29
- def cmp_entities(a, b):
30
- assert(isinstance(a, BratEntity))
31
- assert(isinstance(b, BratEntity))
32
- if a.IndexBegin != b.IndexBegin:
33
- # Ordered by appearance
34
- return a.IndexBegin - b.IndexBegin
35
- else:
36
- # Ordered by length first
37
- b_length = b.IndexEnd - b.IndexBegin
38
- a_length = a.IndexEnd - a.IndexBegin
39
- return b_length - a_length
40
-
41
- def iter_entity_with_local_bounds(self):
42
- self.__entities.sort(key=cmp_to_key(lambda a, b: self.cmp_entities(a, b)))
43
-
44
- bounds_and_entities = []
45
-
46
- # Merging nested entities.
47
- for entity in self.__entities:
48
- start = entity.IndexBegin - self.__index_begin
49
- end = entity.IndexEnd - self.__index_begin
50
- bound = Bound(pos=start, length=end - start)
51
-
52
- updated = False
53
- if len(bounds_and_entities) > 0:
54
- last_bound, last_entities = bounds_and_entities[-1]
55
- if bound.itersects_with(last_bound):
56
- # Update.
57
- last_entities.append(entity)
58
- bounds_and_entities[-1] = (bound.intersect(last_bound), last_entities)
59
- updated = True
60
-
61
- if not updated:
62
- bounds_and_entities.append((bound, [entity]))
63
-
64
- # Returning result.
65
- for item in bounds_and_entities:
66
- bound, entities = item
67
- entity = entities[0] if len(entities) == 1 else \
68
- BratCompoundEntity.from_list(root=entities[0], childs=entities[1:])
69
- yield entity, bound
@@ -1,128 +0,0 @@
1
- from arekit.common.entities.collection import EntityCollection
2
- from arekit.contrib.source.brat.entities.entity import BratEntity
3
- from arekit.contrib.source.brat.sentence import BratSentence
4
-
5
-
6
- class BratDocumentSentencesReader(object):
7
-
8
- @staticmethod
9
- def from_file(input_file, entities, line_handler=None, skip_entity_func=None):
10
- assert(isinstance(entities, EntityCollection))
11
- assert(callable(skip_entity_func) or skip_entity_func is None)
12
-
13
- sentences_data = BratDocumentSentencesReader._parse_sentences(
14
- input_file=input_file, line_handler=line_handler)
15
-
16
- sentence_entities = BratDocumentSentencesReader._parse_entities(
17
- sentences_data=sentences_data,
18
- entities=entities,
19
- skip_entity_func=skip_entity_func)
20
-
21
- # Convert all the content to brat sentences.
22
- brat_sentences = []
23
- for s_ind, s_dict in enumerate(sentences_data):
24
- brat_sentence = BratSentence(text=s_dict["text"],
25
- index_begin=s_dict["ind_begin"],
26
- entities=sentence_entities[s_ind])
27
- brat_sentences.append(brat_sentence)
28
-
29
- return brat_sentences
30
-
31
- @staticmethod
32
- def from_sentences_data(entities, sentences_data, skip_entity_func=None):
33
- assert(isinstance(entities, EntityCollection))
34
-
35
- sentence_entities = BratDocumentSentencesReader._parse_entities(
36
- sentences_data=sentences_data,
37
- entities=entities,
38
- skip_entity_func=skip_entity_func)
39
-
40
- # Convert all the content to brat sentences.
41
- brat_sentences = []
42
- for s_ind, s_dict in enumerate(sentences_data):
43
- brat_sentence = BratSentence(text=s_dict["text"],
44
- index_begin=s_dict["ind_begin"],
45
- entities=sentence_entities[s_ind])
46
- brat_sentences.append(brat_sentence)
47
-
48
- return brat_sentences
49
-
50
- @staticmethod
51
- def __is_sentence_contains(sentence_data, entity):
52
- assert(isinstance(sentence_data, dict))
53
- assert(isinstance(entity, BratEntity))
54
- return entity.IndexBegin >= sentence_data["ind_begin"] and \
55
- entity.IndexEnd <= sentence_data["ind_end"]
56
-
57
- @staticmethod
58
- def _parse_entities(sentences_data, entities, skip_entity_func):
59
- """ Sentences is a list of json-like data (dictionaries).
60
- """
61
- assert(isinstance(sentences_data, list))
62
- assert(isinstance(entities, EntityCollection))
63
-
64
- entities_in_sentences = [[] for _ in range(len(sentences_data))]
65
-
66
- s_ind = 0
67
- e_ind = 0
68
-
69
- while s_ind < len(sentences_data) and e_ind < len(entities):
70
- e = entities.get_entity_by_index(e_ind)
71
- assert (isinstance(e, BratEntity))
72
-
73
- s = sentences_data[s_ind]
74
- entities_in_sentence = entities_in_sentences[s_ind]
75
-
76
- # If entity goes after the current sentence.
77
- if e.IndexBegin > s["ind_end"]:
78
- s_ind += 1
79
- continue
80
-
81
- if skip_entity_func is not None and skip_entity_func(e):
82
- e_ind += 1
83
- continue
84
-
85
- if BratDocumentSentencesReader.__is_sentence_contains(sentence_data=s, entity=e):
86
- entities_in_sentence.append(e)
87
- e_ind += 1
88
- continue
89
-
90
- if e.IndexEnd > s["ind_end"]:
91
- # Intersects with the right border of sentence
92
- s_ind += 1
93
- continue
94
-
95
- if e.IndexBegin < s["ind_begin"]:
96
- # Intersects with the left border of sentence
97
- e_ind += 1
98
- continue
99
-
100
- raise Exception("e_i:{} e:('{}',{},{}), s_i:{}, s_b: [{} {}]".format(
101
- e_ind,
102
- e.Value, e.IndexBegin, e.IndexEnd,
103
- s_ind,
104
- s["ind_begin"], s["ind_end"]))
105
-
106
- return entities_in_sentences
107
-
108
- @staticmethod
109
- def _parse_sentences(input_file, line_handler):
110
- assert(callable(line_handler) or line_handler is None)
111
- sentences = []
112
- line_start = 0
113
-
114
- for line in input_file.readlines():
115
-
116
- line = line.decode('utf-8')
117
- handled_line = line_handler(line) if line_handler is not None else line
118
-
119
- assert(len(line) == len(handled_line))
120
-
121
- line_end = line_start + len(handled_line) - 1
122
-
123
- if handled_line != str('\r\n'):
124
- sentences.append({"text": handled_line, "ind_begin": line_start, "ind_end": line_end})
125
-
126
- line_start = line_end + 1
127
-
128
- return sentences
@@ -1,41 +0,0 @@
1
- from os.path import join
2
-
3
- from arekit.common import utils
4
-
5
-
6
- def download():
7
- root_dir = utils.get_default_download_dir()
8
-
9
- data = {
10
- # RuSentiLex
11
- "rusentilex.zip": "https://www.dropbox.com/s/bdsl3kney30y45z/rusentilex.zip?dl=1",
12
- # RuSentRel-v1.1
13
- "rusentrel-v1_1.zip": "https://www.dropbox.com/s/6aw5jv84jf5hrl2/rusentrel-v1_1.zip?dl=1",
14
- # RuSentiFrames
15
- "rusentiframes-v1_0.zip": "https://www.dropbox.com/s/zvkis77li3f40bm/rusentiframes-v1_0.zip?dl=1",
16
- "rusentiframes-v2_0.zip": "https://www.dropbox.com/s/slbyma7eudmmugp/rusentiframes-v2_0.zip?dl=1",
17
- # RuAttitudes-v1.0 (Many variations)
18
- "ruattitudes-dbg.zip": "https://www.dropbox.com/s/5lmqw9kyb4tfm94/ruattitudes-dbg.zip?dl=1",
19
- "ruattitudes-v1_0.zip": "https://www.dropbox.com/s/wg6oa447msdytj3/ruattitudes-v1_0.zip?dl=1",
20
- "ruattitudes-v1_1.zip": "https://www.dropbox.com/s/e3menx5iqyush19/ruattitudes-v1_1.zip?dl=1",
21
- # RuAttitudes-v2.0 Base
22
- "ruattitudes-v2_0_base.zip": "https://www.dropbox.com/s/y39vqzzjumqhce1/ruattitudes_20_base.zip?dl=1",
23
- "ruattitudes-v2_0_base_neut.zip": "https://www.dropbox.com/s/3xh7gd004oyuwx5/ruattitudes_20_base_neut.zip?dl=1",
24
- # RuAttitudes-v2.0 Large
25
- "ruattitudes-v2_0_large.zip": "https://www.dropbox.com/s/43iqoxlyh38qk8u/ruattitudes_20_large.zip?dl=1",
26
- "ruattitudes-v2_0_large_neut.zip": "https://www.dropbox.com/s/6edqsxehtus4c61/ruattitudes_20_large_neut.zip?dl=1",
27
- # SentiNEREL
28
- "sentinerel-v1_0.zip": "https://www.dropbox.com/s/<HIDDEN>/sentinerel-v1_0.zip?dl=1",
29
- "sentinerel-v2_0.zip": "https://www.dropbox.com/s/<HIDDEN>/sentinerel-v2_0.zip?dl=1",
30
- "sentinerel-v2_1.zip": "https://www.dropbox.com/s/<HIDDEN>/sentinerel-v2_1.zip?dl=1",
31
- # NEREL
32
- "nerel-v1_0.zip": "https://www.dropbox.com/scl/fi/vegk0aczjdm9km410loqv/nerel-v1_0.zip?rlkey=wv0ut86n3x5ao6xabsaxd7lh7&dl=1",
33
- "nerel-v1_1.zip": "https://www.dropbox.com/scl/fi/oaytj0rvx7vhdxjk98x7g/nerel-v1_1.zip?rlkey=klrq0l5rpn10cf7e2swkay6r4&dl=1",
34
- # NEREL-BIO
35
- "nerel-bio-v1_0.zip": "https://www.dropbox.com/scl/fi/nltuulfixbkhg3raczash/nerel-bio-v1_0.zip?rlkey=86uizq1hbkgkx302c5p5znpp6&dl=1"
36
- }
37
-
38
- # Perform downloading ...
39
- for local_name, url_link in data.items():
40
- utils.download(dest_file_path=join(root_dir, local_name),
41
- source_url=url_link)
File without changes
@@ -1,55 +0,0 @@
1
- from arekit.common.entities.collection import EntityCollection
2
- from arekit.common.synonyms.grouping import SynonymsCollectionValuesGroupingProviders
3
- from arekit.contrib.source.brat.annot import BratAnnotationParser
4
- from arekit.contrib.source.brat.entities.entity import BratEntity
5
- from arekit.contrib.source.nerel.io_utils import NerelIOUtils
6
- from arekit.contrib.utils.processing.lemmatization.mystem import MystemWrapper
7
- from arekit.contrib.utils.synonyms.stemmer_based import StemmerBasedSynonymCollection
8
-
9
-
10
- class NerelEntityCollection(EntityCollection):
11
-
12
- def __init__(self, contents, value_to_group_id_func, entities_to_ignore=None):
13
- """
14
- entities_to_ignore: list or None
15
- this parameter is required because of the simplified implementation of
16
- the nested objects of the BRAT annotation.
17
- """
18
- assert(isinstance(contents, dict))
19
- assert(BratAnnotationParser.ENTITIES in contents)
20
- assert(isinstance(entities_to_ignore, list) or entities_to_ignore is None)
21
-
22
- self.__discard_entities = set([] if entities_to_ignore is None else entities_to_ignore)
23
- contents[BratAnnotationParser.ENTITIES] = [e for e in contents[BratAnnotationParser.ENTITIES]
24
- if self.__keep_entity(e)]
25
-
26
- super(NerelEntityCollection, self).__init__(
27
- entities=contents[BratAnnotationParser.ENTITIES],
28
- value_to_group_id_func=value_to_group_id_func)
29
-
30
- self._sort_entities(key=lambda entity: entity.IndexBegin)
31
-
32
- def __keep_entity(self, entity):
33
- assert(isinstance(entity, BratEntity))
34
- return entity.Type not in self.__discard_entities
35
-
36
- @classmethod
37
- def read_collection(cls, filename, version, io_utils, entities_to_ignore=None):
38
- assert(isinstance(io_utils, NerelIOUtils))
39
- assert(isinstance(filename, str))
40
-
41
- # Since this dataset does not provide the synonyms collection by default,
42
- # it is necessary to declare an empty collection to populate so in further.
43
- synonyms = StemmerBasedSynonymCollection(stemmer=MystemWrapper(), is_read_only=False)
44
-
45
- doc_fold = io_utils.map_doc_to_fold_type(version)
46
-
47
- return io_utils.read_from_zip(
48
- inner_path=io_utils.get_annotation_innerpath(folding_data_type=doc_fold[filename], filename=filename),
49
- process_func=lambda input_file: cls(
50
- contents=BratAnnotationParser.parse_annotations(input_file=input_file, encoding='utf-8-sig'),
51
- entities_to_ignore=entities_to_ignore,
52
- value_to_group_id_func=lambda value:
53
- SynonymsCollectionValuesGroupingProviders.provide_existed_or_register_missed_value(
54
- synonyms, value)),
55
- version=version)
File without changes
@@ -1,75 +0,0 @@
1
- from collections import OrderedDict
2
-
3
- from arekit.common.experiment.data_type import DataType
4
- from arekit.common.folding.fixed import FixedFolding
5
-
6
-
7
- def create_fixed_folding(train_filenames, dev_filenames, test_filenames, limit=None):
8
- """ Create fixed data-folding based on the predefined list of filenames,
9
- written in file.
10
- """
11
- assert(isinstance(train_filenames, list))
12
- assert(isinstance(dev_filenames, list))
13
- assert(isinstance(test_filenames, list))
14
-
15
- filenames_by_ids = create_filenames_by_ids(filenames=train_filenames + dev_filenames + test_filenames)
16
-
17
- ids_by_filenames = {}
18
- for doc_id, filename in filenames_by_ids.items():
19
- ids_by_filenames[filename] = doc_id
20
-
21
- train_filenames = train_filenames if limit is None else train_filenames[:limit]
22
- test_filenames = test_filenames if limit is None else test_filenames[:limit]
23
- dev_filenames = dev_filenames if limit is None else dev_filenames[:limit]
24
-
25
- fixed_folding = FixedFolding.from_parts({
26
- DataType.Train: [ids_by_filenames[filename] for filename in train_filenames],
27
- DataType.Test: [ids_by_filenames[filename] for filename in test_filenames],
28
- DataType.Dev: [ids_by_filenames[filename] for filename in dev_filenames]
29
- })
30
-
31
- return filenames_by_ids, fixed_folding
32
-
33
-
34
- def create_filenames_by_ids(filenames):
35
- """ Indexing filenames
36
- """
37
-
38
- def __create_new_id(default_id):
39
- new_id = default_id
40
- while new_id in filenames_by_ids:
41
- new_id += 1
42
- return new_id
43
-
44
- default_id = 0
45
-
46
- filenames_by_ids = OrderedDict()
47
- for fname in filenames:
48
-
49
- doc_id = number_from_string(fname)
50
-
51
- if doc_id is None:
52
- doc_id = __create_new_id(default_id)
53
- default_id = doc_id
54
-
55
- assert(doc_id not in filenames_by_ids)
56
- filenames_by_ids[doc_id] = fname
57
-
58
- return filenames_by_ids
59
-
60
-
61
- def number_from_string(s):
62
- assert(isinstance(s, str))
63
-
64
- digit_chars_prefix = []
65
-
66
- for chr in s:
67
- if chr.isdigit():
68
- digit_chars_prefix.append(chr)
69
- else:
70
- break
71
-
72
- if len(digit_chars_prefix) == 0:
73
- return None
74
-
75
- return int("".join(digit_chars_prefix))
@@ -1,62 +0,0 @@
1
- from os import path
2
-
3
- from arekit.common.experiment.data_type import DataType
4
- from arekit.contrib.source.nerel.folding.fixed import create_fixed_folding
5
- from arekit.contrib.source.nerel.utils import iter_filename_and_splittype
6
- from arekit.contrib.source.zip_utils import ZipArchiveUtils
7
-
8
-
9
- class NerelIOUtils(ZipArchiveUtils):
10
-
11
- splits = {
12
- DataType.Train: "train",
13
- DataType.Dev: "dev",
14
- DataType.Test: "test"
15
- }
16
-
17
- @staticmethod
18
- def get_archive_filepath(version):
19
- return path.join(NerelIOUtils.get_data_root(), "nerel-{}.zip".format(version))
20
-
21
- @staticmethod
22
- def get_annotation_innerpath(folding_data_type, filename):
23
- assert(isinstance(filename, str))
24
- return path.join(NerelIOUtils.splits[folding_data_type], "{}.ann".format(filename))
25
-
26
- @staticmethod
27
- def get_news_innerpath(folding_data_type, filename):
28
- assert(isinstance(filename, str))
29
- return path.join(NerelIOUtils.splits[folding_data_type], "{}.txt".format(filename))
30
-
31
- @staticmethod
32
- def map_doc_to_fold_type(version):
33
-
34
- it = iter_filename_and_splittype(
35
- filenames_it=NerelIOUtils.iter_filenames_from_zip(version),
36
- splits=NerelIOUtils.splits.items())
37
-
38
- d2f = {}
39
- for filename, split_type in it:
40
- d2f[filename] = split_type
41
-
42
- return d2f
43
-
44
- @staticmethod
45
- def read_dataset_split(version, docs_limit=None):
46
-
47
- it = iter_filename_and_splittype(
48
- filenames_it=NerelIOUtils.iter_filenames_from_zip(version),
49
- splits=NerelIOUtils.splits.items())
50
-
51
- f2d = {}
52
- for filename, split_type in it:
53
- if split_type not in f2d:
54
- f2d[split_type] = []
55
- f2d[split_type].append(filename)
56
-
57
- filenames_by_ids, data_folding = create_fixed_folding(train_filenames=f2d[DataType.Train],
58
- test_filenames=f2d[DataType.Test],
59
- dev_filenames=f2d[DataType.Dev],
60
- limit=docs_limit)
61
-
62
- return filenames_by_ids, data_folding