Blame view

tools/sctk-2.4.10/src/asclite/core/speech.h 3.08 KB
8dcb6dfcb   Yannick Estève   first commit
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
  /*
   * ASCLITE
   * Author: Jerome Ajot, Jon Fiscus, Nicolas Radde, Chris Laprun
   *
   * This software was developed at the National Institute of Standards and Technology by 
   * employees of the Federal Government in the course of their official duties. Pursuant
   * to title 17 Section 105 of the United States Code this software is not subject to
   * copyright protection and is in the public domain. ASCLITE is an experimental system.
   * NIST assumes no responsibility whatsoever for its use by other parties, and makes no
   * guarantees, expressed or implied, about its quality, reliability, or any other
   * characteristic. We would appreciate acknowledgement if the software is used.
   *
   * THIS SOFTWARE IS PROVIDED "AS IS."  With regard to this software, NIST MAKES NO EXPRESS
   * OR IMPLIED WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING MERCHANTABILITY,
   * OR FITNESS FOR A PARTICULAR PURPOSE.
   */
  
  #ifndef SPEECH_H
  #define SPEECH_H
  
  #include "stdinc.h"
  #include "segment.h"
  #include "logger.h"
  
  class SpeechSet;
  
  /**
   * Internal representation of an hypothesis file or a reference file.
   */
  class Speech
  {
  	public:
  		// class constructor
  		Speech(SpeechSet* parentSet);
  		Speech(const vector<Segment *>& segments);
  		
  		// class destructor
  		virtual ~Speech();
  		/**
  		 * Retrieve the segment indexed by index.
  		 */
  		Segment* GetSegment(const size_t& index) { return m_segments[index]; }
  		/**
  		 * Remove the segment from the list and link the previous tokens to the nexts.
  		 */
  		void RemoveSegment(Segment* currentSegment);
  		/**
  		 * Add this segment at the end of the segment list.
  		 */
  		virtual void AddSegment(Segment* segment) { m_segments.push_back(segment); }
  		/**
  		 * Return the number of Segments inside the Speech
  		 */
  		size_t NbOfSegments() { return m_segments.size(); }
  		/**
  		 * Return the next Segment starting at the specified time for
  		 * the specified source and channel. If the time is in the middle of
  		 * A segment return the segment itself.
  		 */
  		Segment* NextSegment(const int& time, const string& source, const string& channel);
  		/**
  		 * Return the segments of this speech by the given time
  		 */
  		vector<Segment*> GetSegmentsByTime(const int& start, const int& end, const string& source, const string& channel);
  		/** Determines if case is taken into account to align Tokens part of this Speech. */
  		bool PerformCaseSensitiveAlignment();
  		/** Determines if fragments are considered as correct when aligning Tokens part of this Speech. */
  		bool AreFragmentsCorrect();
  		/** Determines if optionally deletable Tokens need to be accounted for. */
  		bool UseOptionallyDeletable();
  		/** Retrieves the SpeechSet in which this Speech is located */
  		SpeechSet* GetParentSpeechSet();
  		/** returns the Speech as a string */
  		string ToString();
  		
  		int GetMinTokensTime();
  		int GetMaxTokensTime();
  	private:
  		Speech();
  		/**
  		 * Represent all the segments of this speech.
  		 * Note : By definition they cannot overlap with each other
  		 */
  		vector<Segment*> m_segments;		
  		/**
  		 * The parent Set that contain the speech
  		 */
  		SpeechSet* parentSet;
  		
  		static Logger* m_pLogger;
  };
  
  #endif // SPEECH_H