batchalign 0.7.1b7__tar.gz → 0.7.1b9__tar.gz

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 (107) hide show
  1. {batchalign-0.7.1b7/batchalign.egg-info → batchalign-0.7.1b9}/PKG-INFO +1 -1
  2. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/cli/cli.py +15 -12
  3. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/document.py +2 -1
  4. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/morphosyntax/ud.py +46 -20
  5. batchalign-0.7.1b9/batchalign/version +3 -0
  6. {batchalign-0.7.1b7 → batchalign-0.7.1b9/batchalign.egg-info}/PKG-INFO +1 -1
  7. batchalign-0.7.1b7/batchalign/version +0 -3
  8. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/LICENSE +0 -0
  9. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/MANIFEST.in +0 -0
  10. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/README.md +0 -0
  11. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/__init__.py +0 -0
  12. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/__main__.py +0 -0
  13. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/cli/__init__.py +0 -0
  14. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/cli/dispatch.py +0 -0
  15. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/constants.py +0 -0
  16. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/errors.py +0 -0
  17. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/formats/__init__.py +0 -0
  18. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/formats/base.py +0 -0
  19. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/formats/chat/__init__.py +0 -0
  20. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/formats/chat/file.py +0 -0
  21. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/formats/chat/generator.py +0 -0
  22. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/formats/chat/lexer.py +0 -0
  23. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/formats/chat/parser.py +0 -0
  24. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/formats/chat/utils.py +0 -0
  25. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/formats/textgrid/__init__.py +0 -0
  26. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/formats/textgrid/file.py +0 -0
  27. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/formats/textgrid/generator.py +0 -0
  28. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/formats/textgrid/parser.py +0 -0
  29. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/models/__init__.py +0 -0
  30. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/models/resolve.py +0 -0
  31. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/models/speaker/__init__.py +0 -0
  32. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/models/speaker/config.yaml +0 -0
  33. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/models/speaker/infer.py +0 -0
  34. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/models/speaker/utils.py +0 -0
  35. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/models/training/__init__.py +0 -0
  36. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/models/training/run.py +0 -0
  37. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/models/training/utils.py +0 -0
  38. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/models/utils.py +0 -0
  39. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/models/utterance/__init__.py +0 -0
  40. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/models/utterance/dataset.py +0 -0
  41. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/models/utterance/execute.py +0 -0
  42. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/models/utterance/infer.py +0 -0
  43. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/models/utterance/prep.py +0 -0
  44. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/models/utterance/train.py +0 -0
  45. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/models/whisper/__init__.py +0 -0
  46. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/models/whisper/infer_asr.py +0 -0
  47. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/models/whisper/infer_fa.py +0 -0
  48. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/__init__.py +0 -0
  49. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/analysis/__init__.py +0 -0
  50. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/analysis/eval.py +0 -0
  51. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/asr/__init__.py +0 -0
  52. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/asr/rev.py +0 -0
  53. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/asr/utils.py +0 -0
  54. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/asr/whisper.py +0 -0
  55. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/asr/whisperx.py +0 -0
  56. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/base.py +0 -0
  57. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/cleanup/__init__.py +0 -0
  58. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/cleanup/cleanup.py +0 -0
  59. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/cleanup/disfluencies.py +0 -0
  60. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/cleanup/parse_support.py +0 -0
  61. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/cleanup/retrace.py +0 -0
  62. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/cleanup/support/filled_pauses.eng +0 -0
  63. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/cleanup/support/replacements.eng +0 -0
  64. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/cleanup/support/test.test +0 -0
  65. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/dispatch.py +0 -0
  66. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/fa/__init__.py +0 -0
  67. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/fa/whisper_fa.py +0 -0
  68. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/morphosyntax/__init__.py +0 -0
  69. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/morphosyntax/fr/case.py +0 -0
  70. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/pipeline.py +0 -0
  71. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/speaker/__init__.py +0 -0
  72. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/speaker/nemo_speaker.py +0 -0
  73. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/utr/__init__.py +0 -0
  74. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/utr/rev_utr.py +0 -0
  75. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/utr/utils.py +0 -0
  76. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/utr/whisper_utr.py +0 -0
  77. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/utterance/__init__.py +0 -0
  78. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/pipelines/utterance/ud_utterance.py +0 -0
  79. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/tests/__init__.py +0 -0
  80. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/tests/conftest.py +0 -0
  81. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/tests/formats/chat/test_chat_file.py +0 -0
  82. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/tests/formats/chat/test_chat_generator.py +0 -0
  83. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/tests/formats/chat/test_chat_lexer.py +0 -0
  84. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/tests/formats/chat/test_chat_parser.py +0 -0
  85. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/tests/formats/chat/test_chat_utils.py +0 -0
  86. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/tests/formats/textgrid/test_textgrid.py +0 -0
  87. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/tests/pipelines/analysis/test_eval.py +0 -0
  88. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/tests/pipelines/asr/test_asr_pipeline.py +0 -0
  89. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/tests/pipelines/asr/test_asr_utils.py +0 -0
  90. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/tests/pipelines/cleanup/test_disfluency.py +0 -0
  91. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/tests/pipelines/cleanup/test_parse_support.py +0 -0
  92. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/tests/pipelines/fa/test_fa_pipeline.py +0 -0
  93. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/tests/pipelines/fixures.py +0 -0
  94. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/tests/pipelines/test_pipeline.py +0 -0
  95. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/tests/pipelines/test_pipeline_models.py +0 -0
  96. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/tests/test_document.py +0 -0
  97. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/utils/__init__.py +0 -0
  98. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/utils/config.py +0 -0
  99. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/utils/dp.py +0 -0
  100. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign/utils/utils.py +0 -0
  101. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign.egg-info/SOURCES.txt +0 -0
  102. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign.egg-info/dependency_links.txt +0 -0
  103. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign.egg-info/entry_points.txt +0 -0
  104. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign.egg-info/requires.txt +0 -0
  105. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/batchalign.egg-info/top_level.txt +0 -0
  106. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/setup.cfg +0 -0
  107. {batchalign-0.7.1b7 → batchalign-0.7.1b9}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: batchalign
3
- Version: 0.7.1b7
3
+ Version: 0.7.1b9
4
4
  Summary: Python Speech Language Sample Analysis
5
5
  Author: Brian MacWhinney, Houjun Liu
6
6
  Author-email: macw@cmu.edu, houjun@cmu.edu
@@ -119,10 +119,10 @@ batchalign.add_command(train, "models")
119
119
  def align(ctx, in_dir, out_dir, lang, num_speakers, whisper, **kwargs):
120
120
  """Align transcripts against corresponding media files."""
121
121
  def loader(file):
122
- return CHATFile(path=os.path.abspath(file), special_mor_=True).doc
122
+ return CHATFile(path=os.path.abspath(file)).doc
123
123
 
124
124
  def writer(doc, output):
125
- CHATFile(doc=doc, special_mor_=True).write(output)
125
+ CHATFile(doc=doc).write(output)
126
126
 
127
127
  _dispatch("align", lang, num_speakers,
128
128
  ["cha"], ctx,
@@ -159,11 +159,11 @@ def transcribe(ctx, in_dir, out_dir, lang, num_speakers, **kwargs):
159
159
  def writer(doc, output):
160
160
  doc.content.insert(0, CustomLine(id="Comment", type=CustomLineType.INDEPENDENT,
161
161
  content=f"Batchalign {VERSION_NUMBER.strip()}, ASR Engine {asr}"))
162
- CHATFile(doc=doc, special_mor_=True).write(output
163
- .replace(".wav", ".cha")
164
- .replace(".mp4", ".cha")
165
- .replace(".mp3", ".cha"),
166
- write_wor=kwargs.get("wor", False))
162
+ CHATFile(doc=doc).write(output
163
+ .replace(".wav", ".cha")
164
+ .replace(".mp4", ".cha")
165
+ .replace(".mp3", ".cha"),
166
+ write_wor=kwargs.get("wor", False))
167
167
 
168
168
  if kwargs.get("diarize"):
169
169
  _dispatch("transcribe_s",
@@ -192,7 +192,6 @@ def transcribe(ctx, in_dir, out_dir, lang, num_speakers, **kwargs):
192
192
  def morphotag(ctx, in_dir, out_dir, lang, num_speakers, **kwargs):
193
193
  """Perform morphosyntactic analysis on transcripts."""
194
194
 
195
-
196
195
  def loader(file):
197
196
  mwt = {}
198
197
  if kwargs.get("lexicon") != None and kwargs.get("lexicon", "").strip() != "":
@@ -202,13 +201,17 @@ def morphotag(ctx, in_dir, out_dir, lang, num_speakers, **kwargs):
202
201
  raw = [i for i in csv.reader(df)]
203
202
  for i in raw:
204
203
  mwt[i[0]] = tuple(i[1:])
204
+ cf = CHATFile(path=os.path.abspath(file), special_mor_=True)
205
+ doc = cf.doc
206
+ if str(cf).count("%mor") > 0:
207
+ doc.ba_special_["special_mor_notation"] = True
205
208
  return (
206
- CHATFile(path=os.path.abspath(file), special_mor_=True).doc,
209
+ doc,
207
210
  {"retokenize": kwargs["retokenize"], "mwt": mwt}
208
211
  )
209
212
 
210
213
  def writer(doc, output):
211
- CHATFile(doc=doc, special_mor_=True).write(output)
214
+ CHATFile(doc=doc, special_mor_=doc.ba_special_.get("special_mor_notation", False)).write(output)
212
215
 
213
216
  _dispatch("morphotag", lang, num_speakers, ["cha"], ctx,
214
217
  in_dir, out_dir,
@@ -224,10 +227,10 @@ def utseg(ctx, in_dir, out_dir, lang, num_speakers, **kwargs):
224
227
  """Perform morphosyntactic analysis on transcripts."""
225
228
 
226
229
  def loader(file):
227
- return CHATFile(path=os.path.abspath(file), special_mor_=True).doc
230
+ return CHATFile(path=os.path.abspath(file)).doc
228
231
 
229
232
  def writer(doc, output):
230
- CHATFile(doc=doc, special_mor_=True).write(output)
233
+ CHATFile(doc=doc).write(output)
231
234
 
232
235
  _dispatch("utseg", lang, num_speakers, ["cha"], ctx,
233
236
  in_dir, out_dir,
@@ -1,5 +1,5 @@
1
1
  from enum import Enum, IntEnum
2
- from typing import Optional, List, Tuple, Union
2
+ from typing import Optional, List, Tuple, Union, Any, Dict
3
3
  from typing_extensions import Annotated
4
4
 
5
5
  from pydantic import BaseModel, Field, computed_field
@@ -331,6 +331,7 @@ class Document(BaseModel):
331
331
  langs: List[str] = Field(default=["eng"])
332
332
  # persistent digital identifier
333
333
  pid: Optional[str] = Field(default=None)
334
+ ba_special_: Optional[Dict] = Field(default={})
334
335
 
335
336
  def __repr__(self):
336
337
  return "\n".join(self.transcript())
@@ -37,6 +37,7 @@ repath_file = lambda file_path, new_dir: os.path.join(new_dir, pathlib.Path(file
37
37
 
38
38
 
39
39
  from batchalign.document import *
40
+ from batchalign.constants import *
40
41
  from batchalign.pipelines.base import *
41
42
  from batchalign.formats.chat.parser import chat_parse_utterance
42
43
 
@@ -808,27 +809,52 @@ def morphoanalyze(doc: Document, retokenize:bool, status_hook:callable = None, *
808
809
  ut, end = chat_parse_utterance(" ".join([i.text for i in sents[0].tokens])+" "+ending,
809
810
  mor, gra,
810
811
  None, None)
811
- # JANK add a space after every form being analyzed
812
- text_fixed = []
813
- text_orig = i.text
814
- # we do this to force one replacement of the token
815
- # for every input token
816
- for i in sents[0].tokens:
817
- try:
818
- before, after = text_orig.split(i.text, 1)
819
- text_fixed.append(before.strip())
820
- text_fixed.append(i.text.strip())
821
- text_orig = after
822
- except ValueError:
823
- # we give up on that token; likely not found
824
- # because there we tokenization issues (i.e.
825
- # existing tokenization)
826
- continue
827
- text_fixed.append(text_orig.strip())
828
- text_fixed = " ".join(text_fixed).strip()
829
- text_fixed = re.sub(r" +", " ", text_fixed)
812
+ # split the text up into previous chunks
813
+ chunks = list(enumerate(doc.content[indx].text.split(" ")))
814
+ # filter out everything that could not possibly align
815
+ chunks_align = [(i,j) for i,j in chunks
816
+ if len(j) != 0 and (j[0] not in ["<", "[", "&", "\x15"])
817
+ and (len(j) <= 2 or (j[-2] not in "@"))
818
+ and j.strip() not in ENDING_PUNCT + MOR_PUNCT + CHAT_IGNORE + ["++"]]
819
+ # hollow out anything we are trying to align, and leave everything else
820
+ chunks_backplate = [[j]
821
+ if not (len(j) != 0 and (j[0] not in ["<", "[", "&", "\x15"])
822
+ and (len(j) <= 2 or (j[-2] not in "@"))
823
+ and j.strip() not in ENDING_PUNCT + MOR_PUNCT + CHAT_IGNORE + ["++"])
824
+ else
825
+ []
826
+ for i,j in chunks]
827
+ # render each into a list
828
+ chunks_chars = []
829
+ for i,j in chunks_align:
830
+ for k in j:
831
+ chunks_chars.append(PayloadTarget(k, payload=i))
832
+ ud_chars = []
833
+ for i,j in enumerate(ut):
834
+ for k in j.text:
835
+ ud_chars.append(ReferenceTarget(k, payload=i))
836
+ # brrr
837
+ aligned = align(chunks_chars, ud_chars, tqdm=False)
838
+ for i in aligned:
839
+ if isinstance(i, Match):
840
+ if i.reference_payload not in chunks_backplate[i.payload]:
841
+ chunks_backplate[i.payload].append(i.reference_payload)
842
+ elif isinstance(i, Extra) and i.extra_type == ExtraType.PAYLOAD:
843
+ # just put it back
844
+ chunks_backplate[i.payload].append(i.key)
845
+ # resolve all the numbers and flatten
846
+ chunks_backplate = [j if isinstance(j, str) else ut[j].text
847
+ for i in chunks_backplate
848
+ for j in i]
849
+
850
+ retokenized_ut = " ".join(i for i in chunks_backplate if i.strip() not in ["(", ")"])
851
+ retokenized_ut = re.sub(r" +", " ", retokenized_ut)
852
+ # pray to everyone that it works---this will simply crash and ignore
853
+ # the utterance if it didn't work, so we are doing this as a sanity
854
+ # check rather than needing the parsed result
855
+ _1, _2 = chat_parse_utterance(retokenized_ut, mor, gra, None, None)
830
856
  doc.content[indx] = Utterance(content=ut,
831
- text=text_fixed,
857
+ text=retokenized_ut,
832
858
  tier=doc.content[indx].tier,
833
859
  time=doc.content[indx].time,
834
860
  custom_dependencies=doc.content[indx].custom_dependencies)
@@ -0,0 +1,3 @@
1
+ 0.7.1-beta.9
2
+ May 21st, 2024
3
+ minute %umor implementation changes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: batchalign
3
- Version: 0.7.1b7
3
+ Version: 0.7.1b9
4
4
  Summary: Python Speech Language Sample Analysis
5
5
  Author: Brian MacWhinney, Houjun Liu
6
6
  Author-email: macw@cmu.edu, houjun@cmu.edu
@@ -1,3 +0,0 @@
1
- 0.7.1-beta.7
2
- May 21st, 2024
3
- insert debug info to transcribe file
File without changes
File without changes
File without changes
File without changes
File without changes