Commit a564ec1e5b7fd3ebbd26ff5be90d9dc021367622
1 parent
eb3773e12a
Exists in
master
bugfix
update SIGMUND source and bin to take file in argument update script to request SOLR
Showing 15 changed files with 174 additions and 173 deletions Inline Diff
- main_tools/ExploitConfidencePass.sh
- main_tools/OneScriptToRuleThemAll.sh
- tools/SIGMUND/LIA_topic_seg/bin/Test.class
- tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/Boundaries.java
- tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/DefaultBoundaries.java
- tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/DefaultConfig.java
- tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/DefaultGapsScores.java
- tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/DefaultInputData.java
- tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/DefaultLexicalChainList.java
- tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/GapsScores.java
- tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/LemmaDict.java
- tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/LexicalChainList.java
- tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/Sentence.java
- tools/SIGMUND/LIA_topic_seg/src/Test.java
- tools/scripts/ProcessSOLRQueries.py
main_tools/ExploitConfidencePass.sh
1 | #!/bin/bash | 1 | #!/bin/bash |
2 | 2 | ||
3 | ##################################################### | 3 | ##################################################### |
4 | # File : ExploitConfidencePass.sh # | 4 | # File : ExploitConfidencePass.sh # |
5 | # Brief : Exploit the ASR confidence pass to : # | 5 | # Brief : Exploit the ASR confidence pass to : # |
6 | # -> boost the confident zone # | 6 | # -> boost the confident zone # |
7 | # -> find alternative in non confident zone | 7 | # -> find alternative in non confident zone |
8 | # -> dynamicly extend the lexicon # | 8 | # -> dynamicly extend the lexicon # |
9 | # Author : Jean-François Rey # | 9 | # Author : Jean-François Rey # |
10 | # (base on Emmanuel Ferreira # | 10 | # (base on Emmanuel Ferreira # |
11 | # and Hugo Mauchrétien works) # | 11 | # and Hugo Mauchrétien works) # |
12 | # Version : 1.0 # | 12 | # Version : 1.0 # |
13 | # Date : 25/06/13 # | 13 | # Date : 25/06/13 # |
14 | ##################################################### | 14 | ##################################################### |
15 | 15 | ||
16 | echo "### ExploitConfidencePass.sh ###" | 16 | echo "### ExploitConfidencePass.sh ###" |
17 | 17 | ||
18 | # Check OTMEDIA_HOME env var | 18 | # Check OTMEDIA_HOME env var |
19 | if [ -z ${OTMEDIA_HOME} ] | 19 | if [ -z ${OTMEDIA_HOME} ] |
20 | then | 20 | then |
21 | OTMEDIA_HOME=$(dirname $(dirname $(readlink -e $0))) | 21 | OTMEDIA_HOME=$(dirname $(dirname $(readlink -e $0))) |
22 | export OTMEDIA_HOME=$OTMEDIA_HOME | 22 | export OTMEDIA_HOME=$OTMEDIA_HOME |
23 | fi | 23 | fi |
24 | 24 | ||
25 | # where is ExploitConfidencePass.sh | 25 | # where is ExploitConfidencePass.sh |
26 | MAIN_SCRIPT_PATH=$(dirname $(readlink -e $0)) | 26 | MAIN_SCRIPT_PATH=$(dirname $(readlink -e $0)) |
27 | 27 | ||
28 | if [ -z ${SCRIPT_PATH} ] | 28 | if [ -z ${SCRIPT_PATH} ] |
29 | then | 29 | then |
30 | SCRIPT_PATH=$OTMEDIA_HOME/tools/scripts | 30 | SCRIPT_PATH=$OTMEDIA_HOME/tools/scripts |
31 | fi | 31 | fi |
32 | 32 | ||
33 | # Include scripts | 33 | # Include scripts |
34 | . $SCRIPT_PATH"/Tools.sh" | 34 | . $SCRIPT_PATH"/Tools.sh" |
35 | . $SCRIPT_PATH"/CheckExploitConfPass.sh" | 35 | . $SCRIPT_PATH"/CheckExploitConfPass.sh" |
36 | 36 | ||
37 | # where is ExploitConfidencePass.cfg | 37 | # where is ExploitConfidencePass.cfg |
38 | EXPLOITCONFIDENCEPASS_CONFIG_FILE=$OTMEDIA_HOME"/cfg/ExploitConfidencePass.cfg" | 38 | EXPLOITCONFIDENCEPASS_CONFIG_FILE=$OTMEDIA_HOME"/cfg/ExploitConfidencePass.cfg" |
39 | if [ -e $EXPLOITCONFIDENCEPASS_CONFIG_FILE ] | 39 | if [ -e $EXPLOITCONFIDENCEPASS_CONFIG_FILE ] |
40 | then | 40 | then |
41 | . $EXPLOITCONFIDENCEPASS_CONFIG_FILE | 41 | . $EXPLOITCONFIDENCEPASS_CONFIG_FILE |
42 | else | 42 | else |
43 | echo "ERROR : Can't find configuration file $EXPLOITCONFIDENCEPASS_CONFIG_FILE" >&2 | 43 | echo "ERROR : Can't find configuration file $EXPLOITCONFIDENCEPASS_CONFIG_FILE" >&2 |
44 | exit 1 | 44 | exit 1 |
45 | fi | 45 | fi |
46 | 46 | ||
47 | #---------------# | 47 | #---------------# |
48 | # Parse Options # | 48 | # Parse Options # |
49 | #---------------# | 49 | #---------------# |
50 | while getopts ":hDv:cr" opt | 50 | while getopts ":hDv:cr" opt |
51 | do | 51 | do |
52 | case $opt in | 52 | case $opt in |
53 | h) | 53 | h) |
54 | echo -e "$0 [OPTIONS] <INPUT_DIRECTORY>\n" | 54 | echo -e "$0 [OPTIONS] <INPUT_DIRECTORY>\n" |
55 | echo -e "\t Options:" | 55 | echo -e "\t Options:" |
56 | echo -e "\t\t-h :\tprint this message" | 56 | echo -e "\t\t-h :\tprint this message" |
57 | echo -e "\t\t-D :\tDEBUG mode on" | 57 | echo -e "\t\t-D :\tDEBUG mode on" |
58 | echo -e "\t\t-v l :\tVerbose mode, l=(1|2|3) level mode" | 58 | echo -e "\t\t-v l :\tVerbose mode, l=(1|2|3) level mode" |
59 | echo -e "\t\t-c :\tCheck process, stop if error detected" | 59 | echo -e "\t\t-c :\tCheck process, stop if error detected" |
60 | echo -e "\t\t-r n :\tforce rerun without deleting files" | 60 | echo -e "\t\t-r n :\tforce rerun without deleting files" |
61 | exit 1 | 61 | exit 1 |
62 | ;; | 62 | ;; |
63 | D) | 63 | D) |
64 | DEBUG=1 | 64 | DEBUG=1 |
65 | ;; | 65 | ;; |
66 | v) | 66 | v) |
67 | VERBOSE=$OPTARG | 67 | VERBOSE=$OPTARG |
68 | ;; | 68 | ;; |
69 | c) | 69 | c) |
70 | CHECK=1 | 70 | CHECK=1 |
71 | ;; | 71 | ;; |
72 | r) | 72 | r) |
73 | RERUN=1 | 73 | RERUN=1 |
74 | ;; | 74 | ;; |
75 | :) | 75 | :) |
76 | echo "Option -$OPTARG requires an argument." >&2 | 76 | echo "Option -$OPTARG requires an argument." >&2 |
77 | exit 1 | 77 | exit 1 |
78 | ;; | 78 | ;; |
79 | \?) | 79 | \?) |
80 | echo "BAD USAGE : unknow opton -$OPTARG" | 80 | echo "BAD USAGE : unknow opton -$OPTARG" |
81 | #exit 1 | 81 | #exit 1 |
82 | ;; | 82 | ;; |
83 | esac | 83 | esac |
84 | done | 84 | done |
85 | 85 | ||
86 | # mode debug enable | 86 | # mode debug enable |
87 | if [ $DEBUG -eq 1 ] | 87 | if [ $DEBUG -eq 1 ] |
88 | then | 88 | then |
89 | set -x | 89 | set -x |
90 | echo -e "## Mode DEBUG ON ##" | 90 | echo -e "## Mode DEBUG ON ##" |
91 | fi | 91 | fi |
92 | 92 | ||
93 | # mode verbose enable | 93 | # mode verbose enable |
94 | if [ $VERBOSE -gt 0 ]; then echo -e "## Verbose level : $VERBOSE ##" ;fi | 94 | if [ $VERBOSE -gt 0 ]; then echo -e "## Verbose level : $VERBOSE ##" ;fi |
95 | 95 | ||
96 | # Check USAGE by arguments number | 96 | # Check USAGE by arguments number |
97 | if [ $(($#-($OPTIND-1))) -ne 1 ] | 97 | if [ $(($#-($OPTIND-1))) -ne 1 ] |
98 | then | 98 | then |
99 | echo "BAD USAGE : ExploitConfidencePass.sh [OPTIONS] <INPUT_DIRECTORY>" | 99 | echo "BAD USAGE : ExploitConfidencePass.sh [OPTIONS] <INPUT_DIRECTORY>" |
100 | echo "$0 -h for more info" | 100 | echo "$0 -h for more info" |
101 | exit 1 | 101 | exit 1 |
102 | fi | 102 | fi |
103 | 103 | ||
104 | shift $((OPTIND-1)) | 104 | shift $((OPTIND-1)) |
105 | # check input directory - first argument | 105 | # check input directory - first argument |
106 | if [ ! -e $1 ] | 106 | if [ ! -e $1 ] |
107 | then | 107 | then |
108 | print_error "can't open $1" | 108 | print_error "can't open $1" |
109 | exit 1 | 109 | exit 1 |
110 | fi | 110 | fi |
111 | 111 | ||
112 | print_info "[${BASENAME}] => ExploitConfPass start | $(date +'%d/%m/%y %H:%M:%S')" 1 | 112 | print_info "[${BASENAME}] => ExploitConfPass start | $(date +'%d/%m/%y %H:%M:%S')" 1 |
113 | 113 | ||
114 | #-------------# | 114 | #-------------# |
115 | # GLOBAL VARS # | 115 | # GLOBAL VARS # |
116 | #-------------# | 116 | #-------------# |
117 | INPUT_DIR=$(readlink -e $1) | 117 | INPUT_DIR=$(readlink -e $1) |
118 | OUTPUT_DIR=$INPUT_DIR | 118 | OUTPUT_DIR=$INPUT_DIR |
119 | BASENAME=$(basename $OUTPUT_DIR) | 119 | BASENAME=$(basename $OUTPUT_DIR) |
120 | SHOW_DIR="$OUTPUT_DIR/shows/" | 120 | SHOW_DIR="$OUTPUT_DIR/shows/" |
121 | SOLR_RES="$OUTPUT_DIR/solr/" | 121 | SOLR_RES="$OUTPUT_DIR/solr/" |
122 | EXT_LEX="$OUTPUT_DIR/LEX/" | 122 | EXT_LEX="$OUTPUT_DIR/LEX/" |
123 | TRIGGER_CONFZONE="$OUTPUT_DIR/trigg/" | 123 | TRIGGER_CONFZONE="$OUTPUT_DIR/trigg/" |
124 | LOGFILE="$OUTPUT_DIR/info_exploitconf.log" | 124 | LOGFILE="$OUTPUT_DIR/info_exploitconf.log" |
125 | ERRORFILE="$OUTPUT_DIR/error_exploitconf.log" | 125 | ERRORFILE="$OUTPUT_DIR/error_exploitconf.log" |
126 | 126 | ||
127 | CONFPASS_CONFIG_FILE="$(readlink -e $1)/ConfPass.cfg" | 127 | CONFPASS_CONFIG_FILE="$(readlink -e $1)/ConfPass.cfg" |
128 | if [ -e $CONFPASS_CONFIG_FILE ] | 128 | if [ -e $CONFPASS_CONFIG_FILE ] |
129 | then | 129 | then |
130 | { | 130 | { |
131 | RES_CONF_DIR=$(cat $CONFPASS_CONFIG_FILE | grep "^RES_CONF_DIR=" | cut -f2 -d"=") | 131 | RES_CONF_DIR=$(cat $CONFPASS_CONFIG_FILE | grep "^RES_CONF_DIR=" | cut -f2 -d"=") |
132 | RES_CONF=$(cat $CONFPASS_CONFIG_FILE | grep "^CONF_DIR=" | cut -f2 -d"=") | 132 | RES_CONF=$(cat $CONFPASS_CONFIG_FILE | grep "^CONF_DIR=" | cut -f2 -d"=") |
133 | print_info "[${BASENAME}] Use confidence measure from : $RES_CONF" 2 | 133 | print_info "[${BASENAME}] Use confidence measure from : $RES_CONF" 2 |
134 | } | 134 | } |
135 | else | 135 | else |
136 | { | 136 | { |
137 | print_error "[${BASENAME}] Can't find $CONFPASS_CONFIG_FILE" | 137 | print_error "[${BASENAME}] Can't find $CONFPASS_CONFIG_FILE" |
138 | print_error "[${BASENAME}] -> use res_p2" | 138 | print_error "[${BASENAME}] -> use res_p2" |
139 | RES_CONF_DIR="$INPUT_DIR/conf/res_p2/scored_ctm" | 139 | RES_CONF_DIR="$INPUT_DIR/conf/res_p2/scored_ctm" |
140 | RES_CONF="$INPUT_DIR/conf/res_p2" | 140 | RES_CONF="$INPUT_DIR/conf/res_p2" |
141 | } | 141 | } |
142 | fi | 142 | fi |
143 | 143 | ||
144 | mkdir -p $SHOW_DIR > /dev/null 2>&1 | 144 | mkdir -p $SHOW_DIR > /dev/null 2>&1 |
145 | mkdir -p $SOLR_RES > /dev/null 2>&1 | 145 | mkdir -p $SOLR_RES > /dev/null 2>&1 |
146 | mkdir -p $EXT_LEX > /dev/null 2>&1 | 146 | mkdir -p $EXT_LEX > /dev/null 2>&1 |
147 | mkdir -p $TRIGGER_CONFZONE > /dev/null 2>&1 | 147 | mkdir -p $TRIGGER_CONFZONE > /dev/null 2>&1 |
148 | 148 | ||
149 | #------------------# | 149 | #------------------# |
150 | # Create Workspace # | 150 | # Create Workspace # |
151 | #------------------# | 151 | #------------------# |
152 | # Lock directory | 152 | # Lock directory |
153 | if [ -e "$OUTPUT_DIR_BASENAME/EXPLOITCONFPASS.lock" ] && [ $RERUN -eq 0 ] | 153 | if [ -e "$OUTPUT_DIR_BASENAME/EXPLOITCONFPASS.lock" ] && [ $RERUN -eq 0 ] |
154 | then | 154 | then |
155 | print_warn "[${BASENAME}] ExploitConfidencePass is locked -> exit" 2 | 155 | print_warn "[${BASENAME}] ExploitConfidencePass is locked -> exit" 2 |
156 | exit 1 | 156 | exit 1 |
157 | fi | 157 | fi |
158 | rm "$OUTPUT_DIR/EXPLOITCONFPASS.unlock" > /dev/null 2>&1 | 158 | rm "$OUTPUT_DIR/EXPLOITCONFPASS.unlock" > /dev/null 2>&1 |
159 | touch "$OUTPUT_DIR/EXPLOITCONFPASS.lock" > /dev/null 2>&1 | 159 | touch "$OUTPUT_DIR/EXPLOITCONFPASS.lock" > /dev/null 2>&1 |
160 | 160 | ||
161 | rm $LOGFILE $ERRORFILE 2>/dev/null | 161 | rm $LOGFILE $ERRORFILE 2>/dev/null |
162 | 162 | ||
163 | #------# | 163 | #------# |
164 | # Save # | 164 | # Save # |
165 | #------# | 165 | #------# |
166 | cp $EXPLOITCONFIDENCEPASS_CONFIG_FILE $OUTPUT_DIR/ExploitConfPass.cfg | 166 | cp $EXPLOITCONFIDENCEPASS_CONFIG_FILE $OUTPUT_DIR/ExploitConfPass.cfg |
167 | echo "TRIGGER_DIR=$TRIGGER_CONFZONE" >> $OUTPUT_DIR/ExploitConfPass.cfg | 167 | echo "TRIGGER_DIR=$TRIGGER_CONFZONE" >> $OUTPUT_DIR/ExploitConfPass.cfg |
168 | echo "TRIGGER_SPEERAL=$TRIGGER_CONFZONE/speeral/" >> $OUTPUT_DIR/ExploitConfPass.cfg | 168 | echo "TRIGGER_SPEERAL=$TRIGGER_CONFZONE/speeral/" >> $OUTPUT_DIR/ExploitConfPass.cfg |
169 | echo "LEX_SPEERAL=$EXT_LEX/speeral/${lexname}_ext" >> $OUTPUT_DIR/ExploitConfPass.cfg | 169 | echo "LEX_SPEERAL=$EXT_LEX/speeral/${lexname}_ext" >> $OUTPUT_DIR/ExploitConfPass.cfg |
170 | echo "LEX_BINODE_SPEERAL=$EXT_LEX/speeral/${lexname}_ext.bin" >> $OUTPUT_DIR/ExploitConfPass.cfg | 170 | echo "LEX_BINODE_SPEERAL=$EXT_LEX/speeral/${lexname}_ext.bin" >> $OUTPUT_DIR/ExploitConfPass.cfg |
171 | print_info "[${BASENAME}] Save config in $OUTPUT_DIR_BASENAME/ExploitConfPass.cfg" 1 | 171 | print_info "[${BASENAME}] Save config in $OUTPUT_DIR_BASENAME/ExploitConfPass.cfg" 1 |
172 | 172 | ||
173 | #---------------# | 173 | #---------------# |
174 | # Check Pass # | 174 | # Check Pass # |
175 | #---------------# | 175 | #---------------# |
176 | if [ $( ls ${RES_CONF_DIR}/*.res 2> /dev/null | wc -l) -eq 0 ] | 176 | if [ $( ls ${RES_CONF_DIR}/*.res 2> /dev/null | wc -l) -eq 0 ] |
177 | then | 177 | then |
178 | print_error "[${BASENAME}] No Conf Pass res -> exit ExploitConfPass" | 178 | print_error "[${BASENAME}] No Conf Pass res -> exit ExploitConfPass" |
179 | if [ $CHECK -eq 1 ]; then print_log_file $ERRORFILE "No ConfPass res in ${RES_CONF_DIR}" ;fi | 179 | if [ $CHECK -eq 1 ]; then print_log_file $ERRORFILE "No ConfPass res in ${RES_CONF_DIR}" ;fi |
180 | exit 1 | 180 | exit 1 |
181 | fi | 181 | fi |
182 | 182 | ||
183 | #-----------------------# | 183 | #-----------------------# |
184 | # Segmentation by show # | 184 | # Segmentation by show # |
185 | #-----------------------# | 185 | #-----------------------# |
186 | # create txt file from scored res | 186 | # create txt file from scored res |
187 | # tag pos and lemmatization of the txt file | 187 | # tag pos and lemmatization of the txt file |
188 | # merge the scored res and taglem file | 188 | # merge the scored res and taglem file |
189 | # segment using the last generated file | 189 | # segment using the last generated file |
190 | # and create a ctm file by show | 190 | # and create a ctm file by show |
191 | 191 | ||
192 | print_info "[${BASENAME}] Segmentation by show" 1 | 192 | print_info "[${BASENAME}] Segmentation by show" 1 |
193 | 193 | ||
194 | # -> to txt | 194 | # -> to txt |
195 | print_info "[${BASENAME}] Create txt from scored res" 3 | 195 | print_info "[${BASENAME}] Create txt from scored res" 3 |
196 | cat ${RES_CONF_DIR}/*.res > $INPUT_DIR/$BASENAME.sctm | 196 | cat ${RES_CONF_DIR}/*.res > $INPUT_DIR/$BASENAME.sctm |
197 | cat $INPUT_DIR/$BASENAME.seg | $SIGMUND_BIN/myConvert.pl $INPUT_DIR/$BASENAME.sctm $INPUT_DIR/$BASENAME.tmp | 197 | cat $INPUT_DIR/$BASENAME.seg | $SIGMUND_BIN/myConvert.pl $INPUT_DIR/$BASENAME.sctm $INPUT_DIR/$BASENAME.tmp |
198 | cat $INPUT_DIR/$BASENAME.tmp | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -f | sed -e "s/_/ /g" | sort -nt 'n' -k '2' > $INPUT_DIR/$BASENAME.txt | 198 | cat $INPUT_DIR/$BASENAME.tmp | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -f | sed -e "s/_/ /g" | sort -nt 'n' -k '2' > $INPUT_DIR/$BASENAME.txt |
199 | 199 | ||
200 | # -> to tagger + lemme | 200 | # -> to tagger + lemme |
201 | print_info "[${BASENAME}] Tag pos and lem in txt file" 3 | 201 | print_info "[${BASENAME}] Tag pos and lem in txt file" 3 |
202 | iconv -t ISO_8859-1 $INPUT_DIR/$BASENAME.txt > $INPUT_DIR/$BASENAME.tmp | 202 | iconv -t ISO_8859-1 $INPUT_DIR/$BASENAME.txt > $INPUT_DIR/$BASENAME.tmp |
203 | $SIGMUND_BIN/txt2lem.sh $INPUT_DIR/$BASENAME.tmp $INPUT_DIR/$BASENAME.taglem | 203 | $SIGMUND_BIN/txt2lem.sh $INPUT_DIR/$BASENAME.tmp $INPUT_DIR/$BASENAME.taglem |
204 | 204 | ||
205 | # merge sctm and taglem | 205 | # merge sctm and taglem |
206 | print_info "[${BASENAME}] Merge scored ctm with tag pos and lem file" 3 | 206 | print_info "[${BASENAME}] Merge scored ctm with tag pos and lem file" 3 |
207 | cat $INPUT_DIR/$BASENAME.sctm | $SCRIPT_PATH/BdlexUC.pl ${RULES}/basic -f | iconv -t ISO_8859-1 | $SCRIPT_PATH/scoredCtmAndTaggedLem2All.pl $INPUT_DIR/$BASENAME.taglem > $INPUT_DIR/$BASENAME.ctl | 207 | cat $INPUT_DIR/$BASENAME.sctm | $SCRIPT_PATH/BdlexUC.pl ${RULES}/basic -f | iconv -t ISO_8859-1 | $SCRIPT_PATH/scoredCtmAndTaggedLem2All.pl $INPUT_DIR/$BASENAME.taglem > $INPUT_DIR/$BASENAME.ctl |
208 | 208 | ||
209 | # -> new seg | 209 | # -> new seg |
210 | print_info "[${BASENAME}] Create xml file and run Topic Seg" 3 | 210 | print_info "[${BASENAME}] Create xml file and run Topic Seg" 3 |
211 | $SIGMUND_BIN/tagLem2xml.pl $INPUT_DIR/$BASENAME.taglem $INPUT_DIR/$BASENAME.doc.xml | 211 | $SIGMUND_BIN/tagLem2xml.pl $INPUT_DIR/$BASENAME.taglem $INPUT_DIR/$BASENAME.doc.xml |
212 | rm $INPUT_DIR/$BASENAME.tmp #$INPUT_DIR/$BASENAME.taglem | 212 | rm $INPUT_DIR/$BASENAME.tmp #$INPUT_DIR/$BASENAME.taglem |
213 | 213 | ||
214 | # Lia_topic_seg : bring together sentences into show | 214 | # Lia_topic_seg : bring together sentences into show |
215 | cp $INPUT_DIR/$BASENAME.doc.xml 0.xml | 215 | java -cp $LIATOPICSEG/bin Test $INPUT_DIR/$BASENAME.doc.xml > $INPUT_DIR/show.seg |
216 | java -cp $LIATOPICSEG/bin Test > $INPUT_DIR/show.seg | ||
217 | cat $INPUT_DIR/show.seg | $SIGMUND_BIN/toSegEmiss.pl $INPUT_DIR/$BASENAME.show.seg | 216 | cat $INPUT_DIR/show.seg | $SIGMUND_BIN/toSegEmiss.pl $INPUT_DIR/$BASENAME.show.seg |
218 | rm 0.xml $INPUT_DIR/show.seg | ||
219 | 217 | ||
220 | if [ $CHECK -eq 1 ] | 218 | if [ $CHECK -eq 1 ] |
221 | then | 219 | then |
222 | if [ ! -s $INPUT_DIR/$BASENAME.show.seg ] | 220 | if [ ! -s $INPUT_DIR/$BASENAME.show.seg ] |
223 | then | 221 | then |
224 | print_error "[${BASENAME}] No Topic segmentation ! " | 222 | print_error "[${BASENAME}] No Topic segmentation ! " |
225 | print_error "[${BASENAME}] Check $ERRORFILE " | 223 | print_error "[${BASENAME}] Check $ERRORFILE " |
226 | print_log_file "$ERRORFILE" "No Topic segmentation in ${BASENAME}.show.seg" | 224 | print_log_file "$ERRORFILE" "No Topic segmentation in ${BASENAME}.show.seg" |
227 | fi | 225 | fi |
228 | fi | 226 | fi |
229 | 227 | ||
230 | # Segment ctm into several show files and create a seg list by show | 228 | # Segment ctm into several show files and create a seg list by show |
231 | print_info "[${BASENAME}] Segment ctm into show files and a seg list by show" 1 | 229 | print_info "[${BASENAME}] Segment ctm into show files and a seg list by show" 1 |
232 | $SCRIPT_PATH/ctm2show.pl $INPUT_DIR/$BASENAME.ctl $INPUT_DIR/$BASENAME.show.seg $SHOW_DIR | 230 | $SCRIPT_PATH/ctm2show.pl $INPUT_DIR/$BASENAME.ctl $INPUT_DIR/$BASENAME.show.seg $SHOW_DIR |
233 | 231 | ||
234 | #-----------------------------------------------------------# | 232 | #-----------------------------------------------------------# |
235 | # SOLR QUERIES # | 233 | # SOLR QUERIES # |
236 | # -> Create Confidente Word # | 234 | # -> Create Confidente Word # |
237 | # Keep conf words and use Tags # | 235 | # Keep conf words and use Tags # |
238 | # -> Query SOLR (document & multimedia) # | 236 | # -> Query SOLR (document & multimedia) # |
239 | # concat word + add date 2 day before and after the show # | 237 | # concat word + add date 2 day before and after the show # |
240 | # query document & multimedia # | 238 | # query document & multimedia # |
241 | #-----------------------------------------------------------# | 239 | #-----------------------------------------------------------# |
242 | print_info "[${BASENAME}] Create SOLR queries and ask SOLR" 1 | 240 | print_info "[${BASENAME}] Create SOLR queries and ask SOLR" 1 |
243 | for show in $(ls $SHOW_DIR/*.ctm) | 241 | for show in $(ls $SHOW_DIR/*.ctm) |
244 | do | 242 | do |
245 | bn=$(basename $show .ctm) | 243 | bn=$(basename $show .ctm) |
246 | # Remove words with low confidence and keep useful tagger words | 244 | # Remove words with low confidence and keep useful tagger words |
247 | cat $show | $SCRIPT_PATH/KeepConfZone.pl | grep -e "MOTINC\|NMS\|NMP\|NFS\|NFP\|X[A-Z]{3,5}" | cut -f3 -d' ' > "$SHOW_DIR/$bn.confzone" | 245 | cat $show | $SCRIPT_PATH/KeepConfZone.pl | grep -e "MOTINC\|NMS\|NMP\|NFS\|NFP\|X[A-Z]{3,5}" | cut -f3 -d' ' > "$SHOW_DIR/$bn.confzone" |
248 | # Get date 2 day before and after the show | 246 | # Get date 2 day before and after the show |
249 | datePattern=`$SCRIPT_PATH/daybefore2after.sh $(echo $BASENAME | cut -c1-6)` | 247 | datePattern=`$SCRIPT_PATH/daybefore2after.sh $(echo $BASENAME | cut -c1-6)` |
250 | # Create SOLR queries | 248 | # Create SOLR queries |
251 | cat $SHOW_DIR/$bn".confzone" | $SCRIPT_PATH/GenerateSOLRQueries.pl | iconv -f ISO_8859-1 -t UTF-8 > "$SHOW_DIR/$bn.queries" | 249 | cat $SHOW_DIR/$bn".confzone" | $SCRIPT_PATH/GenerateSOLRQueries.pl | iconv -f ISO_8859-1 -t UTF-8 > "$SHOW_DIR/$bn.queries" |
252 | # Ask SOLR DB | 250 | # Ask SOLR DB |
253 | if [ $(wc -w "$SHOW_DIR/$bn.queries" | cut -f1 -d' ') -gt 0 ]; then | 251 | if [ $(wc -w "$SHOW_DIR/$bn.queries" | cut -f1 -d' ') -gt 0 ]; then |
254 | query=$(cat $SHOW_DIR/$bn.queries)"&fq=docDate:[$datePattern]" | 252 | query=$(cat $SHOW_DIR/$bn.queries)"&fq=docDate:[$datePattern]" |
255 | echo $query > $SHOW_DIR/$bn.queries | 253 | echo $query > $SHOW_DIR/$bn.queries |
256 | print_info "python $SCRIPT_PATH/ProcessSOLRQueries.py $SHOW_DIR/$bn.queries $SOLR_RES/$bn.keywords.tmp $SOLR_RES/$bn.txt.tmp" 3 | 254 | print_info "python $SCRIPT_PATH/ProcessSOLRQueries.py $SHOW_DIR/$bn.queries $SOLR_RES/$bn.keywords.tmp $SOLR_RES/$bn.txt.tmp" 3 |
257 | python $SCRIPT_PATH/ProcessSOLRQueries.py $SHOW_DIR/$bn.queries $SOLR_RES/$bn.keywords.tmp $SOLR_RES/$bn.txt.tmp | 255 | python $SCRIPT_PATH/ProcessSOLRQueries.py $SHOW_DIR/$bn.queries $SOLR_RES/$bn.keywords.tmp $SOLR_RES/$bn.txt.tmp |
258 | cat $SOLR_RES/$bn.keywords.tmp | sort -u > $SOLR_RES/$bn.keywords | 256 | cat $SOLR_RES/$bn.keywords.tmp | sort -u > $SOLR_RES/$bn.keywords |
259 | cat $SOLR_RES/$bn.txt.tmp | sort -u > $SOLR_RES/$bn.txt | 257 | cat $SOLR_RES/$bn.txt.tmp | sort -u > $SOLR_RES/$bn.txt |
260 | rm $SOLR_RES/*.tmp > /dev/null 2>&1 | 258 | rm $SOLR_RES/*.tmp > /dev/null 2>&1 |
261 | fi | 259 | fi |
262 | 260 | ||
263 | if [ $CHECK -eq 1 ] | 261 | if [ $CHECK -eq 1 ] |
264 | then | 262 | then |
265 | if [ ! -e $SOLR_RES/$bn.keywords ] || [ ! -e $SOLR_RES/$bn.txt ] | 263 | if [ ! -e $SOLR_RES/$bn.keywords ] || [ ! -e $SOLR_RES/$bn.txt ] |
266 | then | 264 | then |
267 | print_warn "$bn.keywords and $bn.txt are empty !\nMaybe SOLR server is down !" 2 | 265 | print_warn "$bn.keywords and $bn.txt are empty !\nMaybe SOLR server is down !" 2 |
268 | print_log_file "$LOGFILE" "$bn.keywords and $bn.txt are empty !\nMaybe SOLR server is down !" | 266 | print_log_file "$LOGFILE" "$bn.keywords and $bn.txt are empty !\nMaybe SOLR server is down !" |
269 | fi | 267 | fi |
270 | fi | 268 | fi |
271 | 269 | ||
272 | done | 270 | done |
273 | 271 | ||
274 | #----------------------------------------------------------------------------------------------- | 272 | #----------------------------------------------------------------------------------------------- |
275 | # Build trigger file | 273 | # Build trigger file |
276 | # 1) keywords are automatically boosted in the non confident zone of the current res | 274 | # 1) keywords are automatically boosted in the non confident zone of the current res |
277 | # confident zone are boosted | 275 | # confident zone are boosted |
278 | # previous words in sensible zone are penalized | 276 | # previous words in sensible zone are penalized |
279 | # 2) OOVs are extracted + phonetized | 277 | # 2) OOVs are extracted + phonetized |
280 | # 3) Try to find OOVs acousticly in the current segment | 278 | # 3) Try to find OOVs acousticly in the current segment |
281 | # 4) Generate the .trigg file | 279 | # 4) Generate the .trigg file |
282 | #------------------------------------------------------------------------------------------------ | 280 | #------------------------------------------------------------------------------------------------ |
283 | print_info "[${BASENAME}] Build trigger files" 1 | 281 | print_info "[${BASENAME}] Build trigger files" 1 |
284 | for i in `ls $SOLR_RES/*.keywords` | 282 | for i in `ls $SOLR_RES/*.keywords` |
285 | do | 283 | do |
286 | basename=`basename $i .keywords` | 284 | basename=`basename $i .keywords` |
287 | 285 | ||
288 | # | 286 | # |
289 | # Tokenize & produce coverage report | 287 | # Tokenize & produce coverage report |
290 | # Use filter you need | 288 | # Use filter you need |
291 | # | 289 | # |
292 | print_info "[${BASENAME}] keywords filtering and produce coverage report" 3 | 290 | print_info "[${BASENAME}] keywords filtering and produce coverage report" 3 |
293 | # Default filter | 291 | # Default filter |
294 | cat $i | $SCRIPT_PATH/CleanFilter.sh | ${SCRIPT_PATH}/ApplyCorrectionRules.pl ${LEXICON}.regex | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t |\ | 292 | cat $i | $SCRIPT_PATH/CleanFilter.sh | ${SCRIPT_PATH}/ApplyCorrectionRules.pl ${LEXICON}.regex | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t |\ |
295 | $SCRIPT_PATH/CoverageReportMaker.pl --out $SOLR_RES/${basename}_tmp_report $LEXICON.bdlex_tok | 293 | $SCRIPT_PATH/CoverageReportMaker.pl --out $SOLR_RES/${basename}_tmp_report $LEXICON.bdlex_tok |
296 | # do less filter | 294 | # do less filter |
297 | #cat $i | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t | sed -f $RULES/preprocess.regex | sed -f $RULES/lastprocess.regex | $SCRIPT_PATH/CoverageReportMaker.pl --out $SOLR_RES/${basename}_tmp_report $LEXICON.bdlex_tok | 295 | #cat $i | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t | sed -f $RULES/preprocess.regex | sed -f $RULES/lastprocess.regex | $SCRIPT_PATH/CoverageReportMaker.pl --out $SOLR_RES/${basename}_tmp_report $LEXICON.bdlex_tok |
298 | 296 | ||
299 | 297 | ||
300 | # | 298 | # |
301 | # Extract "real" OOV and phonetize them | 299 | # Extract "real" OOV and phonetize them |
302 | # -> petit filtrage persoo pour eviter d'avoir trop de bruits | 300 | # -> petit filtrage persoo pour eviter d'avoir trop de bruits |
303 | # | 301 | # |
304 | print_info "[${BASENAME}] Extract OOV and phonetize them" 3 | 302 | print_info "[${BASENAME}] Extract OOV and phonetize them" 3 |
305 | ${SCRIPT_PATH}/FindNormRules.pl $SOLR_RES/${basename}_tmp_report/report.oov $LEXICON.bdlex_tok | cut -f3 | grep -v "#" | grep -v "^[A-Z]\+$" | grep -v "^[0-9]" | grep --perl-regex -v "^([a-z']){1,3}$" | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -f | iconv -t ISO_8859-1 -f UTF-8 | ${LIA_LTBOX}/lia_phon/script/lia_lex2phon_variante | grep -v "core dumped" | cut -d"[" -f1 | sort -u | ${SCRIPT_PATH}/PhonFormatter.pl | iconv -f ISO_8859-1 -t UTF-8 | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t > $SOLR_RES/${basename}.phon_oov | 303 | ${SCRIPT_PATH}/FindNormRules.pl $SOLR_RES/${basename}_tmp_report/report.oov $LEXICON.bdlex_tok | cut -f3 | grep -v "#" | grep -v "^[A-Z]\+$" | grep -v "^[0-9]" | grep --perl-regex -v "^([a-z']){1,3}$" | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -f | iconv -t ISO_8859-1 -f UTF-8 | ${LIA_LTBOX}/lia_phon/script/lia_lex2phon_variante | grep -v "core dumped" | cut -d"[" -f1 | sort -u | ${SCRIPT_PATH}/PhonFormatter.pl | iconv -f ISO_8859-1 -t UTF-8 | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t > $SOLR_RES/${basename}.phon_oov |
306 | 304 | ||
307 | # | 305 | # |
308 | # Search INVOC & OOV in the current lattice | 306 | # Search INVOC & OOV in the current lattice |
309 | # | 307 | # |
310 | print_info "[${BASENAME}] Search INVOC and OOV in the current lattice" 3 | 308 | print_info "[${BASENAME}] Search INVOC and OOV in the current lattice" 3 |
311 | cat $SOLR_RES/${basename}_tmp_report/report.invoc | grep -v "\b0" | cut -f1 | grep -v --perl-regex -v "^[a-zA-Z']{1,3}$" | grep -v --perl-regex "^[a-zA-Z0-9]{1,3}$" | grep -v "<s>" | grep -v "</s>" | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t > $TRIGGER_CONFZONE/$basename.tosearch | 309 | cat $SOLR_RES/${basename}_tmp_report/report.invoc | grep -v "\b0" | cut -f1 | grep -v --perl-regex -v "^[a-zA-Z']{1,3}$" | grep -v --perl-regex "^[a-zA-Z0-9]{1,3}$" | grep -v "<s>" | grep -v "</s>" | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t > $TRIGGER_CONFZONE/$basename.tosearch |
312 | cat $SOLR_RES/${basename}.phon_oov | cut -f1 >> $TRIGGER_CONFZONE/$basename.tosearch | 310 | cat $SOLR_RES/${basename}.phon_oov | cut -f1 >> $TRIGGER_CONFZONE/$basename.tosearch |
313 | 311 | ||
314 | # For each treil | 312 | # For each treil |
315 | for baseseg in $(cat "$SHOW_DIR/$basename.lst") | 313 | for baseseg in $(cat "$SHOW_DIR/$basename.lst") |
316 | do | 314 | do |
317 | $OTMEDIA_HOME/tools/QUOTE_FINDER/bin/acousticFinder ${LEXICON}.speer_phon $RES_CONF/wlat/$baseseg.wlat $TRIGGER_CONFZONE/${basename}.tosearch $SOLR_RES/$basename.phon_oov > $TRIGGER_CONFZONE/$baseseg.acousticlyfound $OUTPUT_REDIRECTION | 315 | $OTMEDIA_HOME/tools/QUOTE_FINDER/bin/acousticFinder ${LEXICON}.speer_phon $RES_CONF/wlat/$baseseg.wlat $TRIGGER_CONFZONE/${basename}.tosearch $SOLR_RES/$basename.phon_oov > $TRIGGER_CONFZONE/$baseseg.acousticlyfound $OUTPUT_REDIRECTION |
318 | # | 316 | # |
319 | # Produce the boost file for the next decoding pass | 317 | # Produce the boost file for the next decoding pass |
320 | # | 318 | # |
321 | print_info "[${BASENAME}] Produce trigg file : $baseseg " 3 | 319 | print_info "[${BASENAME}] Produce trigg file : $baseseg " 3 |
322 | cat $RES_CONF_DIR/$baseseg.res | $SCRIPT_PATH/ScoreCtm2trigg.pl $TRIGGER_CONFZONE/$baseseg.acousticlyfound > $TRIGGER_CONFZONE/$baseseg.trigg | 320 | cat $RES_CONF_DIR/$baseseg.res | $SCRIPT_PATH/ScoreCtm2trigg.pl $TRIGGER_CONFZONE/$baseseg.acousticlyfound > $TRIGGER_CONFZONE/$baseseg.trigg |
323 | done | 321 | done |
324 | 322 | ||
325 | done | 323 | done |
326 | 324 | ||
327 | #----------------------------------------------------------------------------------------------- | 325 | #----------------------------------------------------------------------------------------------- |
328 | # Build the extended SPEERAL Lexicon | 326 | # Build the extended SPEERAL Lexicon |
329 | # 1) Merge OOVs + LEXICON | 327 | # 1) Merge OOVs + LEXICON |
330 | # 1) Related text are collected in order to find the invoc word with maximizing the ppl (LM proba) | 328 | # 1) Related text are collected in order to find the invoc word with maximizing the ppl (LM proba) |
331 | # 2) The current lexicon is extended with all the valid OOVs | 329 | # 2) The current lexicon is extended with all the valid OOVs |
332 | #----------------------------------------------------------------------------------------------- | 330 | #----------------------------------------------------------------------------------------------- |
333 | print_info "[${BASENAME}] Build extended Speeral Lexicon" 1 | 331 | print_info "[${BASENAME}] Build extended Speeral Lexicon" 1 |
334 | mkdir -p $EXT_LEX/final | 332 | mkdir -p $EXT_LEX/final |
335 | mkdir -p $EXT_LEX/tmp | 333 | mkdir -p $EXT_LEX/tmp |
336 | mkdir -p $EXT_LEX/tmp/txt | 334 | mkdir -p $EXT_LEX/tmp/txt |
337 | # | 335 | # |
338 | # Collect the acousticly found oov and their phonetisation | 336 | # Collect the acousticly found oov and their phonetisation |
339 | # | 337 | # |
340 | print_info "[${BASENAME}] Get all OOV and retrieve all phonetisation" 3 | 338 | print_info "[${BASENAME}] Get all OOV and retrieve all phonetisation" 3 |
341 | for i in `ls $SOLR_RES/*.phon_oov` | 339 | for i in `ls $SOLR_RES/*.phon_oov` |
342 | do | 340 | do |
343 | basename=`basename $i .phon_oov` | 341 | basename=`basename $i .phon_oov` |
344 | 342 | ||
345 | rm $EXT_LEX/$basename.acousticlyfound 2> /dev/null | 343 | rm $EXT_LEX/$basename.acousticlyfound 2> /dev/null |
346 | # list acousticly found for the show | 344 | # list acousticly found for the show |
347 | for baseseg in $(cat "$SHOW_DIR/$basename.lst") | 345 | for baseseg in $(cat "$SHOW_DIR/$basename.lst") |
348 | do | 346 | do |
349 | cat $TRIGGER_CONFZONE/$baseseg.acousticlyfound | cut -f1 | cut -f2 -d"=" >> $EXT_LEX/$basename.acousticlyfound | 347 | cat $TRIGGER_CONFZONE/$baseseg.acousticlyfound | cut -f1 | cut -f2 -d"=" >> $EXT_LEX/$basename.acousticlyfound |
350 | done | 348 | done |
351 | cat $EXT_LEX/$basename.acousticlyfound | sort -u > $EXT_LEX/.tmp | 349 | cat $EXT_LEX/$basename.acousticlyfound | sort -u > $EXT_LEX/.tmp |
352 | mv $EXT_LEX/.tmp $EXT_LEX/$basename.acousticlyfound | 350 | mv $EXT_LEX/.tmp $EXT_LEX/$basename.acousticlyfound |
353 | 351 | ||
354 | # | 352 | # |
355 | # Extract OOV really added | 353 | # Extract OOV really added |
356 | # | 354 | # |
357 | cat $SOLR_RES/$basename.phon_oov | cut -f1 | sort -u > $EXT_LEX/$basename.oov | 355 | cat $SOLR_RES/$basename.phon_oov | cut -f1 | sort -u > $EXT_LEX/$basename.oov |
358 | $SCRIPT_PATH/intersec.pl $EXT_LEX/$basename.oov $EXT_LEX/$basename.acousticlyfound > $EXT_LEX/$basename.oov_acousticlyfound | 356 | $SCRIPT_PATH/intersec.pl $EXT_LEX/$basename.oov $EXT_LEX/$basename.acousticlyfound > $EXT_LEX/$basename.oov_acousticlyfound |
359 | # | 357 | # |
360 | # Retrieve all phonetisation | 358 | # Retrieve all phonetisation |
361 | # | 359 | # |
362 | cat $SOLR_RES/${basename}.phon_oov | $SCRIPT_PATH/LexPhonFilter.pl $EXT_LEX/$basename.oov_acousticlyfound > $EXT_LEX/$basename.oov_acousticlyfound_phon | 360 | cat $SOLR_RES/${basename}.phon_oov | $SCRIPT_PATH/LexPhonFilter.pl $EXT_LEX/$basename.oov_acousticlyfound > $EXT_LEX/$basename.oov_acousticlyfound_phon |
363 | done | 361 | done |
364 | 362 | ||
365 | # | 363 | # |
366 | # Merge OOVs and their phonetisation | 364 | # Merge OOVs and their phonetisation |
367 | # | 365 | # |
368 | print_info "[${BASENAME}] Merge OOV and their phonetisation" 3 | 366 | print_info "[${BASENAME}] Merge OOV and their phonetisation" 3 |
369 | lexname=$(basename $LEXICON) | 367 | lexname=$(basename $LEXICON) |
370 | cat $EXT_LEX/*.oov_acousticlyfound_phon | sort -u > $EXT_LEX/final/all.oov_acousticlyfound_phon | 368 | cat $EXT_LEX/*.oov_acousticlyfound_phon | sort -u > $EXT_LEX/final/all.oov_acousticlyfound_phon |
371 | cat $EXT_LEX/*.oov_acousticlyfound | sort -u | grep --perl-regex -v "^([a-z']){3}$" > $EXT_LEX/final/all.oov_acousticlyfound | 369 | cat $EXT_LEX/*.oov_acousticlyfound | sort -u | grep --perl-regex -v "^([a-z']){3}$" > $EXT_LEX/final/all.oov_acousticlyfound |
372 | $SCRIPT_PATH/MergeLexicon.pl $EXT_LEX/final/all.oov_acousticlyfound_phon > $EXT_LEX/final/${lexname}_ext.phon | 370 | $SCRIPT_PATH/MergeLexicon.pl $EXT_LEX/final/all.oov_acousticlyfound_phon > $EXT_LEX/final/${lexname}_ext.phon |
373 | 371 | ||
374 | # | 372 | # |
375 | # Collect + clean retrieved txt | 373 | # Collect + clean retrieved txt |
376 | # | 374 | # |
377 | print_info "[${BASENAME}] Collect and clean SOLR txt answers" 2 | 375 | print_info "[${BASENAME}] Collect and clean SOLR txt answers" 2 |
378 | # choose filter | 376 | # choose filter |
379 | # default | 377 | # default |
380 | cat $SOLR_RES/*.txt | $SCRIPT_PATH/CleanFilter.sh | $SCRIPT_PATH/ApplyCorrectionRules.pl ${LEXICON}.regex | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t > $EXT_LEX/final/all.bdlex_txt | 378 | cat $SOLR_RES/*.txt | $SCRIPT_PATH/CleanFilter.sh | $SCRIPT_PATH/ApplyCorrectionRules.pl ${LEXICON}.regex | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t > $EXT_LEX/final/all.bdlex_txt |
381 | # low filter | 379 | # low filter |
382 | #cat $SOLR_RES/*.txt | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t | sed -f $RULES/preprocess.regex | sed -f $RULES/lastprocess.regex > $EXT_LEX/final/all.bdlex_txt | 380 | #cat $SOLR_RES/*.txt | $SCRIPT_PATH/BdlexUC.pl $RULES/basic -t | sed -f $RULES/preprocess.regex | sed -f $RULES/lastprocess.regex > $EXT_LEX/final/all.bdlex_txt |
383 | 381 | ||
384 | # | 382 | # |
385 | # Construct the map file | 383 | # Construct the map file |
386 | # | 384 | # |
387 | # Notes: | 385 | # Notes: |
388 | # - Expected format : | 386 | # - Expected format : |
389 | # <WORD1_STRING> <CANDIDATE1_STRING> <PHON_1> | 387 | # <WORD1_STRING> <CANDIDATE1_STRING> <PHON_1> |
390 | # | 388 | # |
391 | print_info "[${BASENAME}] Construct map file" 3 | 389 | print_info "[${BASENAME}] Construct map file" 3 |
392 | rm -f $EXT_LEX/final/${lexname}_ext.map 2>/dev/null | 390 | rm -f $EXT_LEX/final/${lexname}_ext.map 2>/dev/null |
393 | rm -f $EXT_LEX/final/${lexname}.unvalid_oov 2>/dev/null | 391 | rm -f $EXT_LEX/final/${lexname}.unvalid_oov 2>/dev/null |
394 | 392 | ||
395 | while read oov | 393 | while read oov |
396 | do | 394 | do |
397 | oov=`echo $oov | sed "s/\n//g"` | 395 | oov=`echo $oov | sed "s/\n//g"` |
398 | # | 396 | # |
399 | # Obtain the oov's tag | 397 | # Obtain the oov's tag |
400 | # | 398 | # |
401 | #oov_tag=`grep --perl-regex "^$oov\t" $DYNAMIC_TAGSTATS/all.tags | cut -f2` | 399 | #oov_tag=`grep --perl-regex "^$oov\t" $DYNAMIC_TAGSTATS/all.tags | cut -f2` |
402 | # | 400 | # |
403 | # Try to collect text containing the oov word | 401 | # Try to collect text containing the oov word |
404 | # | 402 | # |
405 | print_info "[${BASENAME}] Collect text containing the oov" 3 | 403 | print_info "[${BASENAME}] Collect text containing the oov" 3 |
406 | cat $EXT_LEX/final/all.bdlex_txt | grep --perl-regex " $oov " | $SCRIPT_PATH/NbMaxWordsFilter.pl 40 |uniq > $EXT_LEX/tmp/txt/$oov.bdlex_txt | 404 | cat $EXT_LEX/final/all.bdlex_txt | grep --perl-regex " $oov " | $SCRIPT_PATH/NbMaxWordsFilter.pl 40 |uniq > $EXT_LEX/tmp/txt/$oov.bdlex_txt |
407 | if [ -f $EXT_LEX/tmp/txt/$oov.bdlex_txt ]; then | 405 | if [ -f $EXT_LEX/tmp/txt/$oov.bdlex_txt ]; then |
408 | nbWords=`wc -l $EXT_LEX/tmp/txt/$oov.bdlex_txt | cut -f1 -d" "` | 406 | nbWords=`wc -l $EXT_LEX/tmp/txt/$oov.bdlex_txt | cut -f1 -d" "` |
409 | if [ $nbWords -eq 0 ]; then | 407 | if [ $nbWords -eq 0 ]; then |
410 | print_warn "[${BASENAME}] UNVALID OOV: $oov => $nbWords occurrences" 2 | 408 | print_warn "[${BASENAME}] UNVALID OOV: $oov => $nbWords occurrences" 2 |
411 | echo "$oov" >> $EXT_LEX/final/${lexname}.unvalid_oov | 409 | echo "$oov" >> $EXT_LEX/final/${lexname}.unvalid_oov |
412 | else | 410 | else |
413 | # | 411 | # |
414 | # Find a candidate in a filtred invoc lexicon => a candidate which maximize the ppl in the overall txt collected | 412 | # Find a candidate in a filtred invoc lexicon => a candidate which maximize the ppl in the overall txt collected |
415 | # | 413 | # |
416 | #echo "$/getCandidate $SPEER_LM_PATH $SPEER_LM_BASENAME $oov $LEXICON.bdlex_tok $EXT_LEX/tmp/txt/$oov.bdlex_txt" | 414 | #echo "$/getCandidate $SPEER_LM_PATH $SPEER_LM_BASENAME $oov $LEXICON.bdlex_tok $EXT_LEX/tmp/txt/$oov.bdlex_txt" |
417 | print_info `$SPEERAL_PATH/bin/getCandidate $SPEER_LM_PATH $SPEER_LM_BASENAME $oov $CANDIDATE_LEXICON $EXT_LEX/tmp/txt/$oov.bdlex_txt | cut -f1 -d" "` 3 | 415 | print_info `$SPEERAL_PATH/bin/getCandidate $SPEER_LM_PATH $SPEER_LM_BASENAME $oov $CANDIDATE_LEXICON $EXT_LEX/tmp/txt/$oov.bdlex_txt | cut -f1 -d" "` 3 |
418 | candidate=`$SPEERAL_PATH/bin/getCandidate $SPEER_LM_PATH $SPEER_LM_BASENAME $oov $CANDIDATE_LEXICON $EXT_LEX/tmp/txt/$oov.bdlex_txt | cut -f1 -d" "` | 416 | candidate=`$SPEERAL_PATH/bin/getCandidate $SPEER_LM_PATH $SPEER_LM_BASENAME $oov $CANDIDATE_LEXICON $EXT_LEX/tmp/txt/$oov.bdlex_txt | cut -f1 -d" "` |
419 | if [ ! "$candidate" == "" ]; then | 417 | if [ ! "$candidate" == "" ]; then |
420 | grep --perl-regex "^$oov\t" $EXT_LEX/final/all.oov_acousticlyfound_phon > $EXT_LEX/tmp/$oov.phon | 418 | grep --perl-regex "^$oov\t" $EXT_LEX/final/all.oov_acousticlyfound_phon > $EXT_LEX/tmp/$oov.phon |
421 | while read phonLine | 419 | while read phonLine |
422 | do | 420 | do |
423 | #<word> <phon> => <word> <candidate> <phon> | 421 | #<word> <phon> => <word> <candidate> <phon> |
424 | echo "$phonLine" | sed "s|\t|\t$candidate\t|" >> $EXT_LEX/final/${lexname}_ext.map | 422 | echo "$phonLine" | sed "s|\t|\t$candidate\t|" >> $EXT_LEX/final/${lexname}_ext.map |
425 | done < $EXT_LEX/tmp/$oov.phon | 423 | done < $EXT_LEX/tmp/$oov.phon |
426 | else | 424 | else |
427 | print_warn "[${BASENAME}] UNVALID OOV: $oov => no availaible Candidate word in LM" 2 | 425 | print_warn "[${BASENAME}] UNVALID OOV: $oov => no availaible Candidate word in LM" 2 |
428 | echo "$oov" >> $EXT_LEX/final/${lexname}.unvalid_oov | 426 | echo "$oov" >> $EXT_LEX/final/${lexname}.unvalid_oov |
429 | fi | 427 | fi |
430 | fi | 428 | fi |
431 | else | 429 | else |
432 | print_warn "[${BASENAME}] UNVALID OOV: $oov" 2 | 430 | print_warn "[${BASENAME}] UNVALID OOV: $oov" 2 |
433 | echo "$oov" >> $EXT_LEX/final/${lexname}.unvalid_oov | 431 | echo "$oov" >> $EXT_LEX/final/${lexname}.unvalid_oov |
434 | fi | 432 | fi |
435 | done < $EXT_LEX/final/all.oov_acousticlyfound | 433 | done < $EXT_LEX/final/all.oov_acousticlyfound |
436 | 434 | ||
437 | # | 435 | # |
438 | ### Speeral | 436 | ### Speeral |
439 | # | 437 | # |
440 | 438 | ||
441 | lexname=`basename $LEXICON` | 439 | lexname=`basename $LEXICON` |
442 | # | 440 | # |
443 | # Build the final trigger file | 441 | # Build the final trigger file |
444 | # | 442 | # |
445 | print_info "[${BASENAME}] Clean trigg files" 3 | 443 | print_info "[${BASENAME}] Clean trigg files" 3 |
446 | mkdir -p $TRIGGER_CONFZONE/speeral/ 2> /dev/null | 444 | mkdir -p $TRIGGER_CONFZONE/speeral/ 2> /dev/null |
447 | mkdir -p $EXT_LEX/speeral/ 2> /dev/null | 445 | mkdir -p $EXT_LEX/speeral/ 2> /dev/null |
448 | for i in `ls $TRIGGER_CONFZONE/*.trigg` | 446 | for i in `ls $TRIGGER_CONFZONE/*.trigg` |
449 | do | 447 | do |
450 | basename=`basename $i .trigg` | 448 | basename=`basename $i .trigg` |
451 | cat $i | $SCRIPT_PATH/RemoveLineContaining.pl $EXT_LEX/$lexname.unvalid_oov > $TRIGGER_CONFZONE/speeral/$basename.trigg | 449 | cat $i | $SCRIPT_PATH/RemoveLineContaining.pl $EXT_LEX/$lexname.unvalid_oov > $TRIGGER_CONFZONE/speeral/$basename.trigg |
452 | done | 450 | done |
453 | # | 451 | # |
454 | # Compile the speeral extended lexicon | 452 | # Compile the speeral extended lexicon |
455 | # | 453 | # |
456 | print_info "[${BASENAME}] Compile Speeral extended lexicon" 3 | 454 | print_info "[${BASENAME}] Compile Speeral extended lexicon" 3 |
457 | print_info "$SPEERAL_PATH/bin/buildmappedbinode $LEXICON.bdlex_phon $EXT_LEX/final/${lexname}_ext.map $AM_SKL $EXT_LEX/speeral/${lexname}_ext" 3 | 455 | print_info "$SPEERAL_PATH/bin/buildmappedbinode $LEXICON.bdlex_phon $EXT_LEX/final/${lexname}_ext.map $AM_SKL $EXT_LEX/speeral/${lexname}_ext" 3 |
458 | $SPEERAL_PATH/bin/buildmappedbinode $LEXICON.bdlex_phon $EXT_LEX/final/${lexname}_ext.map $AM_SKL $EXT_LEX/speeral/${lexname}_ext | 456 | $SPEERAL_PATH/bin/buildmappedbinode $LEXICON.bdlex_phon $EXT_LEX/final/${lexname}_ext.map $AM_SKL $EXT_LEX/speeral/${lexname}_ext |
459 | 457 | ||
460 | if [ $CHECK -eq 1 ] | 458 | if [ $CHECK -eq 1 ] |
461 | then | 459 | then |
462 | check_exploitconfpass_lex_check "${EXT_LEX}/speeral/${lexname}_ext" | 460 | check_exploitconfpass_lex_check "${EXT_LEX}/speeral/${lexname}_ext" |
463 | if [ $? -eq 1 ] | 461 | if [ $? -eq 1 ] |
464 | then | 462 | then |
465 | print_error "[${BASENAME}] Building Speeral Lexicon $INPUT_DIR -> exit" | 463 | print_error "[${BASENAME}] Building Speeral Lexicon $INPUT_DIR -> exit" |
466 | print_error "[${BASENAME}] Check $ERRORFILE" | 464 | print_error "[${BASENAME}] Check $ERRORFILE" |
467 | print_log_file $ERRORFILE "ERROR : Building Speeral Lexicon $INPUT_DIR" | 465 | print_log_file $ERRORFILE "ERROR : Building Speeral Lexicon $INPUT_DIR" |
468 | print_log_file $ERRORFILE "ERROR : ${EXT_LEX}/speeral/${lexname}_ext Empty after buildmappedbinode ?" | 466 | print_log_file $ERRORFILE "ERROR : ${EXT_LEX}/speeral/${lexname}_ext Empty after buildmappedbinode ?" |
469 | exit 1; | 467 | exit 1; |
470 | fi | 468 | fi |
471 | fi | 469 | fi |
472 | 470 | ||
473 | 471 | ||
474 | #-------# | 472 | #-------# |
475 | # CLOSE # | 473 | # CLOSE # |
476 | #-------# | 474 | #-------# |
477 | # Seem OK | 475 | # Seem OK |
478 | print_info "[${BASENAME}] <= ExploitConfidencePass End | $(date +'%d/%m/%y %H:%M:%S')" 1 | 476 | print_info "[${BASENAME}] <= ExploitConfidencePass End | $(date +'%d/%m/%y %H:%M:%S')" 1 |
479 | 477 | ||
480 | # unlok directory | 478 | # unlok directory |
481 | mv "$OUTPUT_DIR/EXPLOITCONFPASS.lock" "$OUTPUT_DIR/EXPLOITCONFPASS.unlock" | 479 | mv "$OUTPUT_DIR/EXPLOITCONFPASS.lock" "$OUTPUT_DIR/EXPLOITCONFPASS.unlock" |
482 | 480 | ||
483 | 481 | ||
484 | 482 |
main_tools/OneScriptToRuleThemAll.sh
1 | #!/bin/bash | 1 | #!/bin/bash |
2 | 2 | ||
3 | ##################################### | 3 | ##################################### |
4 | # File: OneScriptToRuleThemAll.sh # | 4 | # File: OneScriptToRuleThemAll.sh # |
5 | # Brief : Script to launch OTMEDIA # | 5 | # Brief : Script to launch OTMEDIA # |
6 | # Version : 1.0 # | 6 | # Version : 1.0 # |
7 | # Date : 23/07/2013 # | 7 | # Date : 23/07/2013 # |
8 | # Author : Jean-François Rey # | 8 | # Author : Jean-François Rey # |
9 | ##################################### | 9 | ##################################### |
10 | 10 | ||
11 | echo -e "#### OneScriptToRuleThemAll ####" | 11 | echo -e "#### OneScriptToRuleThemAll ####" |
12 | LORD=" Three::rings | 12 | LORD=" Three::rings |
13 | for:::the::Elven-King | 13 | for:::the::Elven-King |
14 | under:the:sky,:Seven:for:the | 14 | under:the:sky,:Seven:for:the |
15 | Dwarf-Lords::in::their::halls:of | 15 | Dwarf-Lords::in::their::halls:of |
16 | stone,:Nine for:Mortal | 16 | stone,:Nine for:Mortal |
17 | :::Men::: ________ doomed::to | 17 | :::Men::: ________ doomed::to |
18 | die.:One _,-'...:... \`-. for:::the | 18 | die.:One _,-'...:... \`-. for:::the |
19 | ::Dark:: ,- .:::::::::::. \`. Lord::on | 19 | ::Dark:: ,- .:::::::::::. \`. Lord::on |
20 | his:dark ,' .:::::zzz:::::. \`. :throne: | 20 | his:dark ,' .:::::zzz:::::. \`. :throne: |
21 | In:::the/ ::::OTMEDIA:::: \ Land::of | 21 | In:::the/ ::::OTMEDIA:::: \ Land::of |
22 | :Mordor:\ ::::SCRIPTS:::: / :where:: | 22 | :Mordor:\ ::::SCRIPTS:::: / :where:: |
23 | ::the::: '. '::::YEEEP::::' ,' Shadows: | 23 | ::the::: '. '::::YEEEP::::' ,' Shadows: |
24 | lie.::One \`. \`\`:::::::::'' ,' Ring::to | 24 | lie.::One \`. \`\`:::::::::'' ,' Ring::to |
25 | ::rule:: \`-._\`\`\`:'''_,-' ::them:: | 25 | ::rule:: \`-._\`\`\`:'''_,-' ::them:: |
26 | all,::One \`-----' ring::to | 26 | all,::One \`-----' ring::to |
27 | ::find::: them,:One | 27 | ::find::: them,:One |
28 | Ring:::::to bring::them | 28 | Ring:::::to bring::them |
29 | all::and::in:the:darkness:bind | 29 | all::and::in:the:darkness:bind |
30 | them:In:the:Land:of:Mordor | 30 | them:In:the:Land:of:Mordor |
31 | where:::the::Shadows | 31 | where:::the::Shadows |
32 | :::lie.:::" | 32 | :::lie.:::" |
33 | 33 | ||
34 | 34 | ||
35 | # Check OTMEDIA_HOME env var | 35 | # Check OTMEDIA_HOME env var |
36 | if [ -z ${OTMEDIA_HOME} ] | 36 | if [ -z ${OTMEDIA_HOME} ] |
37 | then | 37 | then |
38 | OTMEDIA_HOME=$(dirname $(dirname $(readlink -e $0))) | 38 | OTMEDIA_HOME=$(dirname $(dirname $(readlink -e $0))) |
39 | export OTMEDIA_HOME=$OTMEDIA_HOME | 39 | export OTMEDIA_HOME=$OTMEDIA_HOME |
40 | fi | 40 | fi |
41 | 41 | ||
42 | # where is OneScriptToRuleThemAll.sh | 42 | # where is OneScriptToRuleThemAll.sh |
43 | MAIN_SCRIPT_PATH=$(dirname $(readlink -e $0)) | 43 | MAIN_SCRIPT_PATH=$(dirname $(readlink -e $0)) |
44 | 44 | ||
45 | RING="" | 45 | RING="" |
46 | p1=0 | 46 | p1=0 |
47 | p2=0 | 47 | p2=0 |
48 | conf=0 | 48 | conf=0 |
49 | exploitconf=0 | 49 | exploitconf=0 |
50 | p3=0 | 50 | p3=0 |
51 | recompose=0 | 51 | recompose=0 |
52 | scoring=0 | 52 | scoring=0 |
53 | 53 | ||
54 | #---------------# | 54 | #---------------# |
55 | # Parse Options # | 55 | # Parse Options # |
56 | #---------------# | 56 | #---------------# |
57 | while getopts ":hDv:cf:r123C:eRsa" opt | 57 | while getopts ":hDv:cf:r123C:eRsa" opt |
58 | do | 58 | do |
59 | case $opt in | 59 | case $opt in |
60 | h) | 60 | h) |
61 | echo -e "$0 [OPTIONS] <WAV_FILE> <OUTPUT_DIRECTORY>\n" | 61 | echo -e "$0 [OPTIONS] <WAV_FILE> <OUTPUT_DIRECTORY>\n" |
62 | echo -e "\t Options:" | 62 | echo -e "\t Options:" |
63 | echo -e "\t\t-h :\tprint this message" | 63 | echo -e "\t\t-h :\tprint this message" |
64 | echo -e "\t\t-D :\tDEBUG mode on" | 64 | echo -e "\t\t-D :\tDEBUG mode on" |
65 | echo -e "\t\t-v l :\tVerbose mode, l=(1|2|3) level mode" | 65 | echo -e "\t\t-v l :\tVerbose mode, l=(1|2|3) level mode" |
66 | echo -e "\t\t-c :\tCheck process, stop if error detected" | 66 | echo -e "\t\t-c :\tCheck process, stop if error detected" |
67 | echo -e "\t\t-f n :\tSpecify a speeral forks number (default 1)" | 67 | echo -e "\t\t-f n :\tSpecify a speeral forks number (default 1)" |
68 | echo -e "\t\t-r :\tForce to rerun without deleting all files" | 68 | echo -e "\t\t-r :\tForce to rerun without deleting all files" |
69 | echo -e "\t\t-a :\tDo every pass" | 69 | echo -e "\t\t-a :\tDo every pass" |
70 | echo -e "\t\t-1 :\tDo 1rt pass" | 70 | echo -e "\t\t-1 :\tDo 1rt pass" |
71 | echo -e "\t\t-2 :\tDo 2nd pass" | 71 | echo -e "\t\t-2 :\tDo 2nd pass" |
72 | echo -e "\t\t-3 :\tDo 3rd pass" | 72 | echo -e "\t\t-3 :\tDo 3rd pass" |
73 | echo -e "\t\t-C p :\tDo p confidence pass (1=all, 2 or 3)" | 73 | echo -e "\t\t-C p :\tDo p confidence pass (1=all, 2 or 3)" |
74 | echo -e "\t\t-e :\tDo exploit confidence pass (SOLR)" | 74 | echo -e "\t\t-e :\tDo exploit confidence pass (SOLR)" |
75 | echo -e "\t\t-R :\tDo recompose res" | 75 | echo -e "\t\t-R :\tDo recompose res" |
76 | echo -e "\t\t-s :\tDo scoring" | 76 | echo -e "\t\t-s :\tDo scoring" |
77 | exit 1 | 77 | exit 1 |
78 | ;; | 78 | ;; |
79 | D) | 79 | D) |
80 | RING=$RING" -D" | 80 | RING=$RING" -D" |
81 | ;; | 81 | ;; |
82 | v) | 82 | v) |
83 | RING=$RING" -v $OPTARG" | 83 | RING=$RING" -v $OPTARG" |
84 | ;; | 84 | ;; |
85 | c) | 85 | c) |
86 | RING=$RING" -c" | 86 | RING=$RING" -c" |
87 | ;; | 87 | ;; |
88 | f) | 88 | f) |
89 | FORKS=" -f $OPTARG" | 89 | FORKS=" -f $OPTARG" |
90 | ;; | 90 | ;; |
91 | r) | 91 | r) |
92 | RING=$RING" -r" | 92 | RING=$RING" -r" |
93 | ;; | 93 | ;; |
94 | a) | 94 | a) |
95 | p1=1 | 95 | p1=1 |
96 | p2=1 | 96 | p2=1 |
97 | p3=1 | 97 | p3=1 |
98 | conf=1 | 98 | conf=1 |
99 | exploitconf=1 | 99 | exploitconf=1 |
100 | recompose=1 | 100 | recompose=1 |
101 | scoring=1 | 101 | scoring=1 |
102 | ;; | 102 | ;; |
103 | 1) | 103 | 1) |
104 | p1=1 | 104 | p1=1 |
105 | ;; | 105 | ;; |
106 | 2) | 106 | 2) |
107 | p2=1 | 107 | p2=1 |
108 | ;; | 108 | ;; |
109 | 3) | 109 | 3) |
110 | p3=1 | 110 | p3=1 |
111 | ;; | 111 | ;; |
112 | C) | 112 | C) |
113 | conf=$OPTARG | 113 | conf=$OPTARG |
114 | ;; | 114 | ;; |
115 | e) | 115 | e) |
116 | exploitconf=1 | 116 | exploitconf=1 |
117 | ;; | 117 | ;; |
118 | R) | 118 | R) |
119 | recompose=1 | 119 | recompose=1 |
120 | ;; | 120 | ;; |
121 | s) | 121 | s) |
122 | scoring=1 | 122 | scoring=1 |
123 | ;; | 123 | ;; |
124 | :) | 124 | :) |
125 | echo "Option -$OPTARG requires an argument." >&2 | 125 | echo "Option -$OPTARG requires an argument." >&2 |
126 | exit 1 | 126 | exit 1 |
127 | ;; | 127 | ;; |
128 | \?) | 128 | \?) |
129 | echo "BAD USAGE : unknow opton -$OPTARG" | 129 | echo "BAD USAGE : unknow opton -$OPTARG" |
130 | exit 1 | 130 | exit 1 |
131 | ;; | 131 | ;; |
132 | esac | 132 | esac |
133 | done | 133 | done |
134 | 134 | ||
135 | # Check USAGE by arguments number | 135 | # Check USAGE by arguments number |
136 | if [ $(($#-($OPTIND-1))) -ne 2 ] | 136 | if [ $(($#-($OPTIND-1))) -ne 2 ] |
137 | then | 137 | then |
138 | echo "BAD USAGE : $0 [OPTIONS] <WAV_FILE> <OUTPUT_DIR>" | 138 | echo "BAD USAGE : $0 [OPTIONS] <WAV_FILE> <OUTPUT_DIR>" |
139 | echo "$0 -h for more info" | 139 | echo "$0 -h for more info" |
140 | exit 1 | 140 | exit 1 |
141 | fi | 141 | fi |
142 | 142 | ||
143 | shift $((OPTIND-1)) | 143 | shift $((OPTIND-1)) |
144 | # check audio file - First argument | 144 | # check audio file - First argument |
145 | if [ -e $1 ] && [ -s $1 ] | 145 | if [ $p1 -eq 0 ] || [[ -e $1 && -s $1 ]] |
146 | then | 146 | then |
147 | echo -e "$LORD\n" | 147 | echo -e "$LORD\n" |
148 | REP_OUT=$2/$(basename ${1%.*}) | 148 | REP_OUT=$2/$(basename ${1%.*}) |
149 | if [ $p1 -eq 1 ];then ${MAIN_SCRIPT_PATH}/FirstPass.sh ${RING} ${FORKS} $1 $2;fi | 149 | if [ $p1 -eq 1 ];then ${MAIN_SCRIPT_PATH}/FirstPass.sh ${RING} ${FORKS} $1 $2;fi |
150 | if [ $p2 -eq 1 ];then ${MAIN_SCRIPT_PATH}/SecondPass.sh ${RING} ${FORKS} ${REP_OUT};fi | 150 | if [ $p2 -eq 1 ];then ${MAIN_SCRIPT_PATH}/SecondPass.sh ${RING} ${FORKS} ${REP_OUT};fi |
151 | if [ $conf -eq 1 ] || [ $conf -eq 2 ];then $p${MAIN_SCRIPT_PATH}/ConfPass.sh ${RING} ${REP_OUT} "res_p2";fi | 151 | if [ $conf -eq 1 ] || [ $conf -eq 2 ];then $p${MAIN_SCRIPT_PATH}/ConfPass.sh ${RING} ${REP_OUT} "res_p2";fi |
152 | if [ $exploitconf -eq 1 ]; then ${MAIN_SCRIPT_PATH}/ExploitConfidencePass.sh ${RING} ${REP_OUT};fi | 152 | if [ $exploitconf -eq 1 ]; then ${MAIN_SCRIPT_PATH}/ExploitConfidencePass.sh ${RING} ${REP_OUT};fi |
153 | if [ $p3 -eq 1 ];then ${MAIN_SCRIPT_PATH}/ThirdPass.sh ${RING} ${FORKS} ${REP_OUT};fi | 153 | if [ $p3 -eq 1 ];then ${MAIN_SCRIPT_PATH}/ThirdPass.sh ${RING} ${FORKS} ${REP_OUT};fi |
154 | if [ $conf -eq 1 ] || [ $conf -eq 3 ];then ${MAIN_SCRIPT_PATH}/ConfPass.sh ${RING} ${REP_OUT} "res_p3";fi | 154 | if [ $conf -eq 1 ] || [ $conf -eq 3 ];then ${MAIN_SCRIPT_PATH}/ConfPass.sh ${RING} ${REP_OUT} "res_p3";fi |
155 | if [ $recompose -eq 1 ];then ${MAIN_SCRIPT_PATH}/RecomposePass.sh ${RING} ${REP_OUT};fi | 155 | if [ $recompose -eq 1 ];then ${MAIN_SCRIPT_PATH}/RecomposePass.sh ${RING} ${REP_OUT};fi |
156 | if [ $scoring -eq 1 ];then ${MAIN_SCRIPT_PATH}/ScoringRes.sh ${RING} ${REP_OUT};fi | 156 | if [ $scoring -eq 1 ];then ${MAIN_SCRIPT_PATH}/ScoringRes.sh ${RING} ${REP_OUT};fi |
157 | echo "done" | 157 | echo "done" |
158 | else | 158 | else |
159 | echo "can't find $1 OR file is empty" | 159 | echo "can't find $1 OR file is empty" |
160 | exit 1 | 160 | exit 1 |
161 | fi | 161 | fi |
162 | 162 | ||
163 | 163 | ||
164 | 164 | ||
165 | 165 |
tools/SIGMUND/LIA_topic_seg/bin/Test.class
No preview for this file type
tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/Boundaries.java
1 | package LIA_topic_seg; | 1 | package LIA_topic_seg; |
2 | 2 | ||
3 | /** | 3 | /** |
4 | * Cette interface est dŽdiŽe ˆ la sŽlection des frontires ˆ partir d'un tableau de valeurs | 4 | * Cette interface est dédiée à la sélection des frontières à partir d'un tableau de valeurs |
5 | * associŽes ˆ chaque intervalle entre deux unitŽs de traitement. | 5 | * associées à chaque intervalle entre deux unités de traitement. |
6 | * La sŽlection peut se faire ˆ partir d'un nombre connu de frontires ou non, l'essentiel Žtant | 6 | * La sélection peut se faire à partir d'un nombre connu de frontières ou non, l'essentiel étant |
7 | * de fournir un sous ensemble des intervalles du texte en rŽponse. | 7 | * de fournir un sous ensemble des intervalles du texte en réponse. |
8 | * | 8 | * |
9 | * | 9 | * |
10 | */ | 10 | */ |
11 | public interface Boundaries { | 11 | public interface Boundaries { |
12 | /** | 12 | /** |
13 | * retourne les numŽros des phrases aprs lesquelles se trouvent les frontires thŽmatiques | 13 | * retourne les numéros des phrases après lesquelles se trouvent les frontières thématiques |
14 | * @return un tableau d'entiers qui sont les frontires thŽmatiques | 14 | * @return un tableau d'entiers qui sont les frontières thématiques |
15 | */ | 15 | */ |
16 | public int[] position_boundaries(); | 16 | public int[] position_boundaries(); |
17 | /** | 17 | /** |
18 | * renvoie le nombre de segments thŽmatiques dŽduits | 18 | * renvoie le nombre de segments thématiques déduits |
19 | * @return un nombre | 19 | * @return un nombre |
20 | */ | 20 | */ |
21 | public int count_segments(); | 21 | public int count_segments(); |
22 | /** | 22 | /** |
23 | * permet de conna”tre le nombre de frontires thŽmatiques ˆ l'intŽrieur du texte | 23 | * permet de connaître le nombre de frontières thématiques à l'intérieur du texte |
24 | * Il se peut que ce nombre soit infŽrieur ˆ un nombre initialisŽ. | 24 | * Il se peut que ce nombre soit inférieur à un nombre initialisé. |
25 | * @return le nombre de frontires thŽmatiques | 25 | * @return le nombre de frontières thématiques |
26 | */ | 26 | */ |
27 | public int count_boundaries(); | 27 | public int count_boundaries(); |
28 | /** | 28 | /** |
29 | * Cette fonction permet de suivre l'Žvolution du programme en affichant les valeurs calculŽes | 29 | * Cette fonction permet de suivre l'évolution du programme en affichant les valeurs calculées |
30 | * @return une cha”ne de caractre o chaque ligne est un numŽro de frontire thŽmatique | 30 | * @return une chaîne de caractère où chaque ligne est un numéro de frontière thématique |
31 | */ | 31 | */ |
32 | public String toString(); | 32 | public String toString(); |
33 | } | 33 | } |
34 | 34 |
tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/DefaultBoundaries.java
1 | package LIA_topic_seg; | 1 | package LIA_topic_seg; |
2 | 2 | ||
3 | import java.util.*; | 3 | import java.util.*; |
4 | 4 | ||
5 | /** | 5 | /** |
6 | * Cette classe implŽmente des calculs de frontires consŽcutifs aux calculs de valeurs des intervalles | 6 | * Cette classe implémente des calculs de frontières consécutifs aux calculs de valeurs des intervalles |
7 | * entre les unitŽs de traitement effectuŽs dans DefaultGapScores. | 7 | * entre les unités de traitement effectués dans DefaultGapScores. |
8 | * Elle permet de dŽduire les frontires ˆ partir des similaritŽs cosine, ou des profondeurs de similaritŽs. | 8 | * Elle permet de déduire les frontières à partir des similarités cosine, ou des profondeurs de similarités. |
9 | * Dans le premier cas on cherchera ˆ minimiser les scores, dans le second ˆ les maximiser. Pour les similaritŽs, | 9 | * Dans le premier cas on cherchera à minimiser les scores, dans le second à les maximiser. Pour les similarités, |
10 | * lissŽes ou non, on peut Žgalement rechercher des minimas locaux dans une certaine fentre, ce qui revient en fait | 10 | * lissées ou non, on peut également rechercher des minimas locaux dans une certaine fenêtre, ce qui revient en fait |
11 | * ˆ fixer une taille minimale des segments. | 11 | * à fixer une taille minimale des segments. |
12 | * Ces fonctions peuvent retourner un nombre de frontires prŽdŽfini dans le constructeur, ou bien peuvent | 12 | * Ces fonctions peuvent retourner un nombre de frontières prédéfini dans le constructeur, ou bien peuvent |
13 | * retourner les frontires en deˆ ou au delˆ d'un certain seuil, calculŽ en fonction de la moyenne et l'Žcart type | 13 | * retourner les frontières en deçà ou au delà d'un certain seuil, calculé en fonction de la moyenne et l'écart type |
14 | * de l'ensemble des scores des intervalles entre unitŽs de traitement. | 14 | * de l'ensemble des scores des intervalles entre unités de traitement. |
15 | * Toutes les fonctions travaillent directement sur l'attribut topic_boundaries et le mettent ˆ jour. | 15 | * Toutes les fonctions travaillent directement sur l'attribut topic_boundaries et le mettent à jour. |
16 | * | 16 | * |
17 | * | 17 | * |
18 | */ | 18 | */ |
19 | public class DefaultBoundaries implements Boundaries { | 19 | public class DefaultBoundaries implements Boundaries { |
20 | 20 | ||
21 | float[] gaps_scores; | 21 | float[] gaps_scores; |
22 | int[] topic_boundaries; | 22 | int[] topic_boundaries; |
23 | int boundaries = 0; | 23 | int boundaries = 0; |
24 | float coef = -1; | 24 | float coef = -1; |
25 | 25 | ||
26 | /** | 26 | /** |
27 | * Constructeur de la classe avec un nombre prŽdŽfini de frontires thŽmatiques | 27 | * Constructeur de la classe avec un nombre prédéfini de frontières thématiques |
28 | * @param bw : le calcul des scores de tous les intervalles | 28 | * @param bw : le calcul des scores de tous les intervalles |
29 | * @param n : le nombre de frontires ˆ rechercher | 29 | * @param n : le nombre de frontières à rechercher |
30 | */ | 30 | */ |
31 | public DefaultBoundaries(GapsScores bw, int n) { | 31 | public DefaultBoundaries(GapsScores bw, int n) { |
32 | 32 | ||
33 | gaps_scores = bw.values(); | 33 | gaps_scores = bw.values(); |
34 | boundaries = n; | 34 | boundaries = n; |
35 | 35 | ||
36 | 36 | ||
37 | } | 37 | } |
38 | 38 | ||
39 | 39 | ||
40 | 40 | ||
41 | /** | 41 | /** |
42 | * Constructeur de la classe avec un nombre inconnu de frontires thŽmatiques, | 42 | * Constructeur de la classe avec un nombre inconnu de frontières thématiques, |
43 | * et un coefficient multiplicateur de prise en compte de l'Žcart type | 43 | * et un coefficient multiplicateur de prise en compte de l'écart type |
44 | * @param bw : le calcul des scores de tous les intervalles | 44 | * @param bw : le calcul des scores de tous les intervalles |
45 | * @param c : le seuil de dŽcision sera = moyenne + c*ecart_type | 45 | * @param c : le seuil de décision sera = moyenne + c*ecart_type |
46 | */ | 46 | */ |
47 | public DefaultBoundaries(GapsScores bw, float c) { | 47 | public DefaultBoundaries(GapsScores bw, float c) { |
48 | 48 | ||
49 | gaps_scores = bw.values(); | 49 | gaps_scores = bw.values(); |
50 | coef = c ; | 50 | coef = c ; |
51 | 51 | ||
52 | } | 52 | } |
53 | 53 | ||
54 | /** | 54 | /** |
55 | * Constructeur de la classe avec un nombre inconnu de frontires thŽmatiques, et un coefficient de | 55 | * Constructeur de la classe avec un nombre inconnu de frontières thématiques, et un coefficient de |
56 | * prise en compte de l'Žcart type par dŽfaut | 56 | * prise en compte de l'écart type par défaut |
57 | * @param bw : le calcul des scores de tous les intervalles | 57 | * @param bw : le calcul des scores de tous les intervalles |
58 | */ | 58 | */ |
59 | public DefaultBoundaries(GapsScores bw) { | 59 | public DefaultBoundaries(GapsScores bw) { |
60 | 60 | ||
61 | gaps_scores = bw.values(); | 61 | gaps_scores = bw.values(); |
62 | 62 | ||
63 | } | 63 | } |
64 | 64 | ||
65 | /** | 65 | /** |
66 | * Cette fonction calcule les frontires en recherchant les plus petites similaritŽs, puis en vŽrifiant que ces frontires ont une valeur infŽrieurs ˆ leurs voisines. | 66 | * Cette fonction calcule les frontières en recherchant les plus petites similarités, puis en vérifiant que ces frontières ont une valeur inférieurs à leurs voisines. |
67 | * Pour cela, on effectue d'abord un tri des frontires en fonction de leurs valeurs, puis on sŽlectionne dans l'ordre celles qui n'ont pas de "proches voisins" dŽjˆ sŽlectionnŽ. | 67 | * Pour cela, on effectue d'abord un tri des frontières en fonction de leurs valeurs, puis on sélectionne dans l'ordre celles qui n'ont pas de "proches voisins" déjà sélectionné. |
68 | * @param window : fentre dans laquelle on souhaite que les valeurs retenues soient minimales. On peut Žgalement considŽrer ce paramtre comme une taille minimale des segments. | 68 | * @param window : fenêtre dans laquelle on souhaite que les valeurs retenues soient minimales. On peut également considérer ce paramètre comme une taille minimale des segments. |
69 | */ | 69 | */ |
70 | public void compute_loc_min(int window){ | 70 | public void compute_loc_min(int window){ |
71 | //cette fonction est valable pour les calculs basŽs uniquement sur des cosinus ou Žquivalents | 71 | //cette fonction est valable pour les calculs basés uniquement sur des cosinus ou équivalents |
72 | //mme fonctionnement que compute_minimas sauf qu'on vŽrifie que la frontire est seule dans une fentre | 72 | //même fonctionnement que compute_minimas sauf qu'on vérifie que la frontière est seule dans une fenêtre |
73 | //la valeur de cette fentre permet de dŽterminer une taille minimale des segments | 73 | //la valeur de cette fenêtre permet de déterminer une taille minimale des segments |
74 | Comparator comparateur = new Comparator() { | 74 | Comparator comparateur = new Comparator() { |
75 | public int compare(Object i1, Object i2){ | 75 | public int compare(Object i1, Object i2){ |
76 | 76 | ||
77 | int un = ((Integer)i1).intValue(); | 77 | int un = ((Integer)i1).intValue(); |
78 | int deux = ((Integer)i2).intValue(); | 78 | int deux = ((Integer)i2).intValue(); |
79 | 79 | ||
80 | float h = gaps_scores[un]-gaps_scores[deux]; | 80 | float h = gaps_scores[un]-gaps_scores[deux]; |
81 | // System.out.println("ouin2 " + h); | 81 | // System.out.println("ouin2 " + h); |
82 | if (h>0) {return 1;} | 82 | if (h>0) {return 1;} |
83 | else if (h==0) {return 0;} | 83 | else if (h==0) {return 0;} |
84 | else {return -1;} | 84 | else {return -1;} |
85 | 85 | ||
86 | // return (gaps_scores[((Integer)i1).intValue()],gaps_scores[((Integer)i2).intValue()]); | 86 | // return (gaps_scores[((Integer)i1).intValue()],gaps_scores[((Integer)i2).intValue()]); |
87 | 87 | ||
88 | } | 88 | } |
89 | }; | 89 | }; |
90 | 90 | ||
91 | 91 | ||
92 | Integer [] sentences = new Integer[gaps_scores.length] ; | 92 | Integer [] sentences = new Integer[gaps_scores.length] ; |
93 | for (int i = 0; i<gaps_scores.length ; i++){ | 93 | for (int i = 0; i<gaps_scores.length ; i++){ |
94 | sentences[i]=new Integer(i); | 94 | sentences[i]=new Integer(i); |
95 | //System.out.print(sentences[i].intValue()); | 95 | //System.out.print(sentences[i].intValue()); |
96 | } | 96 | } |
97 | topic_boundaries = new int[boundaries]; | 97 | topic_boundaries = new int[boundaries]; |
98 | Arrays.sort (sentences, comparateur); | 98 | Arrays.sort (sentences, comparateur); |
99 | 99 | ||
100 | boolean[] choosen_boundaries = new boolean[gaps_scores.length]; | 100 | boolean[] choosen_boundaries = new boolean[gaps_scores.length]; |
101 | for (int i = 0 ; i< choosen_boundaries.length ; i++){ | 101 | for (int i = 0 ; i< choosen_boundaries.length ; i++){ |
102 | choosen_boundaries[i]=false; | 102 | choosen_boundaries[i]=false; |
103 | } | 103 | } |
104 | 104 | ||
105 | if (boundaries !=0){ | 105 | if (boundaries !=0){ |
106 | int n=0; | 106 | int n=0; |
107 | int j=0; | 107 | int j=0; |
108 | while ( n<boundaries && j<sentences.length){ | 108 | while ( n<boundaries && j<sentences.length){ |
109 | int position = sentences[j].intValue(); | 109 | int position = sentences[j].intValue(); |
110 | boolean test = false; | 110 | boolean test = false; |
111 | int k=1; | 111 | int k=1; |
112 | while (k<= window && !test && position-k>=0){ | 112 | while (k<= window && !test && position-k>=0){ |
113 | test = choosen_boundaries[position-k]; | 113 | test = choosen_boundaries[position-k]; |
114 | k++; | 114 | k++; |
115 | } | 115 | } |
116 | k=1; | 116 | k=1; |
117 | while (k<= window && !test && position+k < choosen_boundaries.length){ | 117 | while (k<= window && !test && position+k < choosen_boundaries.length){ |
118 | test = choosen_boundaries[position+k]; | 118 | test = choosen_boundaries[position+k]; |
119 | k++; | 119 | k++; |
120 | } | 120 | } |
121 | if (!test){ | 121 | if (!test){ |
122 | topic_boundaries[n] = position; | 122 | topic_boundaries[n] = position; |
123 | choosen_boundaries[position] = true; | 123 | choosen_boundaries[position] = true; |
124 | n++; | 124 | n++; |
125 | } | 125 | } |
126 | j++; | 126 | j++; |
127 | 127 | ||
128 | } | 128 | } |
129 | if (n < boundaries){ | 129 | if (n < boundaries){ |
130 | int [] topic_boundaries2 = new int[n]; | 130 | int [] topic_boundaries2 = new int[n]; |
131 | for (int i=0 ; i<n ; i++){ | 131 | for (int i=0 ; i<n ; i++){ |
132 | topic_boundaries2[i] = topic_boundaries[i]; | 132 | topic_boundaries2[i] = topic_boundaries[i]; |
133 | } | 133 | } |
134 | topic_boundaries = topic_boundaries2.clone(); | 134 | topic_boundaries = topic_boundaries2.clone(); |
135 | } | 135 | } |
136 | boundaries = n; | 136 | boundaries = n; |
137 | } | 137 | } |
138 | else{ | 138 | else{ |
139 | Vector<Integer> vect = new Vector<Integer>(); | 139 | Vector<Integer> vect = new Vector<Integer>(); |
140 | float value = 0; | 140 | float value = 0; |
141 | float ec = 0; | 141 | float ec = 0; |
142 | for (int i=0; i<gaps_scores.length ; i++){ | 142 | for (int i=0; i<gaps_scores.length ; i++){ |
143 | value +=gaps_scores[i]; | 143 | value +=gaps_scores[i]; |
144 | } | 144 | } |
145 | value = value / gaps_scores.length; | 145 | value = value / gaps_scores.length; |
146 | for (int i=0; i<gaps_scores.length ; i++){ | 146 | for (int i=0; i<gaps_scores.length ; i++){ |
147 | ec +=Math.abs(gaps_scores[i]-value); | 147 | ec +=Math.abs(gaps_scores[i]-value); |
148 | } | 148 | } |
149 | ec = ec/gaps_scores.length; | 149 | ec = ec/gaps_scores.length; |
150 | 150 | ||
151 | int i=0; | 151 | int i=0; |
152 | while (gaps_scores[sentences[i].intValue()]<value+(coef*ec) && i<gaps_scores.length){ | 152 | while (gaps_scores[sentences[i].intValue()]<value+(coef*ec) && i<gaps_scores.length){ |
153 | //for (int i=0; i<gaps_scores.length ; i++){ | 153 | //for (int i=0; i<gaps_scores.length ; i++){ |
154 | // if (gaps_scores[i]<value-ec){ | 154 | // if (gaps_scores[i]<value-ec){ |
155 | 155 | ||
156 | int position = sentences[i].intValue(); | 156 | int position = sentences[i].intValue(); |
157 | boolean test = false; | 157 | boolean test = false; |
158 | int k = 1; | 158 | int k = 1; |
159 | while (k<=window && !test && position-k>0){ | 159 | while (k<=window && !test && position-k>0){ |
160 | test = choosen_boundaries[position-k]; | 160 | test = choosen_boundaries[position-k]; |
161 | k++; | 161 | k++; |
162 | } | 162 | } |
163 | k = 1; | 163 | k = 1; |
164 | while (k<=window && !test && k+position<choosen_boundaries.length){ | 164 | while (k<=window && !test && k+position<choosen_boundaries.length){ |
165 | test = choosen_boundaries[position+k]; | 165 | test = choosen_boundaries[position+k]; |
166 | k++; | 166 | k++; |
167 | } | 167 | } |
168 | if (!test){ | 168 | if (!test){ |
169 | Integer bound = new Integer(position); | 169 | Integer bound = new Integer(position); |
170 | vect.add(bound); | 170 | vect.add(bound); |
171 | choosen_boundaries[position]=true; | 171 | choosen_boundaries[position]=true; |
172 | } | 172 | } |
173 | //} | 173 | //} |
174 | i++; | 174 | i++; |
175 | } | 175 | } |
176 | topic_boundaries = new int[vect.size()]; | 176 | topic_boundaries = new int[vect.size()]; |
177 | for (int n=0;n<vect.size();n++){ | 177 | for (int n=0;n<vect.size();n++){ |
178 | 178 | ||
179 | topic_boundaries[n]=((Integer)vect.elementAt(n)).intValue(); | 179 | topic_boundaries[n]=((Integer)vect.elementAt(n)).intValue(); |
180 | 180 | ||
181 | } | 181 | } |
182 | } | 182 | } |
183 | 183 | ||
184 | 184 | ||
185 | 185 | ||
186 | } | 186 | } |
187 | 187 | ||
188 | /** | 188 | /** |
189 | * Cette fonction dŽduit les frontires thŽmatiques on sŽlectionnant les n plus petites si le nombre de frontires ˆ sŽlectionners est prŽdŽfini, | 189 | * Cette fonction déduit les frontières thématiques on sélectionnant les n plus petites si le nombre de frontières à sélectionners est prédéfini, |
190 | * ou en sŽlectionnant toutes celles sous un certain seuil (moyenne - ecart-type) sinon. | 190 | * ou en sélectionnant toutes celles sous un certain seuil (moyenne - ecart-type) sinon. |
191 | * | 191 | * |
192 | */ | 192 | */ |
193 | public void compute_min_similarities(){ | 193 | public void compute_min_similarities(){ |
194 | //cette fonction renvoie les plus petits scores comme frontires . | 194 | //cette fonction renvoie les plus petits scores comme frontières . |
195 | //peut tre exŽcutŽe aprs calcul des similaritŽs. | 195 | //peut être exécutée après calcul des similarités. |
196 | Comparator comparateur = new Comparator() { | 196 | Comparator comparateur = new Comparator() { |
197 | public int compare(Object i1, Object i2){ | 197 | public int compare(Object i1, Object i2){ |
198 | 198 | ||
199 | int un = ((Integer)i1).intValue(); | 199 | int un = ((Integer)i1).intValue(); |
200 | int deux = ((Integer)i2).intValue(); | 200 | int deux = ((Integer)i2).intValue(); |
201 | 201 | ||
202 | float h = gaps_scores[un]-gaps_scores[deux]; | 202 | float h = gaps_scores[un]-gaps_scores[deux]; |
203 | // System.out.println("ouin2 " + h); | 203 | // System.out.println("ouin2 " + h); |
204 | if (h>0) {return 1;} | 204 | if (h>0) {return 1;} |
205 | else if (h==0) {return 0;} | 205 | else if (h==0) {return 0;} |
206 | else {return -1;} | 206 | else {return -1;} |
207 | 207 | ||
208 | // return (gaps_scores[((Integer)i1).intValue()],gaps_scores[((Integer)i2).intValue()]); | 208 | // return (gaps_scores[((Integer)i1).intValue()],gaps_scores[((Integer)i2).intValue()]); |
209 | 209 | ||
210 | } | 210 | } |
211 | }; | 211 | }; |
212 | 212 | ||
213 | if (boundaries != 0) { | 213 | if (boundaries != 0) { |
214 | Integer [] sentences = new Integer[gaps_scores.length] ; | 214 | Integer [] sentences = new Integer[gaps_scores.length] ; |
215 | for (int i = 0; i<gaps_scores.length ; i++){ | 215 | for (int i = 0; i<gaps_scores.length ; i++){ |
216 | sentences[i]=new Integer(i); | 216 | sentences[i]=new Integer(i); |
217 | //System.out.print(sentences[i].intValue()); | 217 | //System.out.print(sentences[i].intValue()); |
218 | } | 218 | } |
219 | topic_boundaries = new int[boundaries]; | 219 | topic_boundaries = new int[boundaries]; |
220 | Arrays.sort (sentences, comparateur); | 220 | Arrays.sort (sentences, comparateur); |
221 | for (int j=0; j<boundaries ; j++){ | 221 | for (int j=0; j<boundaries ; j++){ |
222 | topic_boundaries[j] = sentences[j].intValue(); | 222 | topic_boundaries[j] = sentences[j].intValue(); |
223 | } | 223 | } |
224 | } | 224 | } |
225 | 225 | ||
226 | else { | 226 | else { |
227 | 227 | ||
228 | Vector<Integer> vect = new Vector<Integer>(); | 228 | Vector<Integer> vect = new Vector<Integer>(); |
229 | float value = 0; | 229 | float value = 0; |
230 | float ec = 0; | 230 | float ec = 0; |
231 | for (int i=0; i<gaps_scores.length ; i++){ | 231 | for (int i=0; i<gaps_scores.length ; i++){ |
232 | value +=gaps_scores[i]; | 232 | value +=gaps_scores[i]; |
233 | } | 233 | } |
234 | value = value / gaps_scores.length; | 234 | value = value / gaps_scores.length; |
235 | for (int i=0; i<gaps_scores.length ; i++){ | 235 | for (int i=0; i<gaps_scores.length ; i++){ |
236 | ec +=Math.abs(gaps_scores[i]-value); | 236 | ec +=Math.abs(gaps_scores[i]-value); |
237 | } | 237 | } |
238 | ec = ec/gaps_scores.length; | 238 | ec = ec/gaps_scores.length; |
239 | 239 | ||
240 | for (int i=0; i<gaps_scores.length ; i++){ | 240 | for (int i=0; i<gaps_scores.length ; i++){ |
241 | if (gaps_scores[i]<value+(coef*ec)){ | 241 | if (gaps_scores[i]<value+(coef*ec)){ |
242 | 242 | ||
243 | Integer bound = new Integer(i); | 243 | Integer bound = new Integer(i); |
244 | vect.add(bound); | 244 | vect.add(bound); |
245 | 245 | ||
246 | } | 246 | } |
247 | } | 247 | } |
248 | topic_boundaries = new int[vect.size()]; | 248 | topic_boundaries = new int[vect.size()]; |
249 | for (int i=0;i<vect.size();i++){ | 249 | for (int i=0;i<vect.size();i++){ |
250 | 250 | ||
251 | topic_boundaries[i]=((Integer)vect.elementAt(i)).intValue(); | 251 | topic_boundaries[i]=((Integer)vect.elementAt(i)).intValue(); |
252 | 252 | ||
253 | } | 253 | } |
254 | 254 | ||
255 | } | 255 | } |
256 | } | 256 | } |
257 | 257 | ||
258 | 258 | ||
259 | /** | 259 | /** |
260 | * Cette fonction dŽduit les frontires thŽmatiques on sŽlectionnant les n plus grandes valeurs si le nombre de frontires ˆ sŽlectionners est prŽdŽfini, | 260 | * Cette fonction déduit les frontières thématiques on sélectionnant les n plus grandes valeurs si le nombre de frontières à sélectionners est prédéfini, |
261 | * ou en sŽlectionnant toutes celles au dessus un certain seuil (moyenne + ecart-type) sinon. | 261 | * ou en sélectionnant toutes celles au dessus un certain seuil (moyenne + ecart-type) sinon. |
262 | * | 262 | * |
263 | */ | 263 | */ |
264 | public void compute_max_depth(){ | 264 | public void compute_max_depth(){ |
265 | // cette fonction permet de dŽterminer les frontires ˆ partir des depth scores | 265 | // cette fonction permet de déterminer les frontières à partir des depth scores |
266 | //on recherche alors les intervalles candidats ayant les plus grands scores | 266 | //on recherche alors les intervalles candidats ayant les plus grands scores |
267 | //le nombre est dŽterminŽ par boundaries ou bien ŽvaluŽ avec la moyenne et l'Žcart type | 267 | //le nombre est déterminé par boundaries ou bien évalué avec la moyenne et l'écart type |
268 | Comparator<Integer> comparateur = new Comparator<Integer>() { | 268 | Comparator<Integer> comparateur = new Comparator<Integer>() { |
269 | public int compare(Integer i1, Integer i2){ | 269 | public int compare(Integer i1, Integer i2){ |
270 | 270 | ||
271 | 271 | ||
272 | float h = gaps_scores[i1.intValue()]-gaps_scores[i2.intValue()]; | 272 | float h = gaps_scores[i1.intValue()]-gaps_scores[i2.intValue()]; |
273 | if (h>0) {return -1;} | 273 | if (h>0) {return -1;} |
274 | else if (h==0) {return 0;} | 274 | else if (h==0) {return 0;} |
275 | else {return 1;} | 275 | else {return 1;} |
276 | 276 | ||
277 | 277 | ||
278 | } | 278 | } |
279 | }; | 279 | }; |
280 | Integer [] sentences = new Integer[gaps_scores.length] ; | 280 | Integer [] sentences = new Integer[gaps_scores.length] ; |
281 | for (int i = 0; i<gaps_scores.length ; i++){ | 281 | for (int i = 0; i<gaps_scores.length ; i++){ |
282 | sentences[i]=new Integer(i); | 282 | sentences[i]=new Integer(i); |
283 | //System.out.print(sentences[i].intValue()); | 283 | //System.out.print(sentences[i].intValue()); |
284 | } | 284 | } |
285 | if (boundaries != 0) { | 285 | if (boundaries != 0) { |
286 | topic_boundaries = new int[boundaries]; | 286 | topic_boundaries = new int[boundaries]; |
287 | Arrays.sort (sentences, comparateur); | 287 | Arrays.sort (sentences, comparateur); |
288 | for (int j=0; j<boundaries && j<topic_boundaries.length; j++){ | 288 | for (int j=0; j<boundaries && j<topic_boundaries.length; j++){ |
289 | topic_boundaries[j] = sentences[j].intValue(); | 289 | topic_boundaries[j] = sentences[j].intValue(); |
290 | } | 290 | } |
291 | } | 291 | } |
292 | 292 | ||
293 | else { | 293 | else { |
294 | Vector<Integer> vect = new Vector<Integer>(); | 294 | Vector<Integer> vect = new Vector<Integer>(); |
295 | float value = 0; | 295 | float value = 0; |
296 | float ec = 0; | 296 | float ec = 0; |
297 | for (int i=0; i<gaps_scores.length ; i++){ | 297 | for (int i=0; i<gaps_scores.length ; i++){ |
298 | value +=gaps_scores[i]; | 298 | value +=gaps_scores[i]; |
299 | } | 299 | } |
300 | value = value / gaps_scores.length; | 300 | value = value / gaps_scores.length; |
301 | for (int i=0; i<gaps_scores.length ; i++){ | 301 | for (int i=0; i<gaps_scores.length ; i++){ |
302 | ec += Math.abs(gaps_scores[i]-value); | 302 | ec += Math.abs(gaps_scores[i]-value); |
303 | } | 303 | } |
304 | ec = ec/gaps_scores.length; | 304 | ec = ec/gaps_scores.length; |
305 | 305 | ||
306 | for (int i=0; i<gaps_scores.length ; i++){ | 306 | for (int i=0; i<gaps_scores.length ; i++){ |
307 | if (gaps_scores[i]>value+(coef*ec)){ | 307 | if (gaps_scores[i]>value+(coef*ec)){ |
308 | 308 | ||
309 | Integer bound = new Integer(i); | 309 | Integer bound = new Integer(i); |
310 | vect.add(bound); | 310 | vect.add(bound); |
311 | 311 | ||
312 | } | 312 | } |
313 | } | 313 | } |
314 | topic_boundaries = new int[vect.size()]; | 314 | topic_boundaries = new int[vect.size()]; |
315 | for (int i=0;i<vect.size();i++){ | 315 | for (int i=0;i<vect.size();i++){ |
316 | 316 | ||
317 | topic_boundaries[i]=((Integer)vect.elementAt(i)).intValue(); | 317 | topic_boundaries[i]=((Integer)vect.elementAt(i)).intValue(); |
318 | 318 | ||
319 | } | 319 | } |
320 | 320 | ||
321 | } | 321 | } |
322 | } | 322 | } |
323 | 323 | ||
324 | 324 | ||
325 | 325 | ||
326 | /** | 326 | /** |
327 | * retourne les numŽros des phrases aprs lesquelles se trouvent les frontires thŽmatiques | 327 | * retourne les numéros des phrases après lesquelles se trouvent les frontières thématiques |
328 | */ | 328 | */ |
329 | public int[] position_boundaries(){ | 329 | public int[] position_boundaries(){ |
330 | //retourne les numŽros des phrases aprs lesquelles se trouvent les frontires thŽmatiques | 330 | //retourne les numéros des phrases après lesquelles se trouvent les frontières thématiques |
331 | return topic_boundaries; | 331 | return topic_boundaries; |
332 | 332 | ||
333 | } | 333 | } |
334 | 334 | ||
335 | 335 | ||
336 | public int count_boundaries(){ | 336 | public int count_boundaries(){ |
337 | 337 | ||
338 | return boundaries; | 338 | return boundaries; |
339 | 339 | ||
340 | } | 340 | } |
341 | 341 | ||
342 | public int count_segments(){ | 342 | public int count_segments(){ |
343 | 343 | ||
344 | return boundaries+1; | 344 | return boundaries+1; |
345 | 345 | ||
346 | } | 346 | } |
347 | 347 | ||
348 | public String to_string(){ | 348 | public String to_string(){ |
349 | java.io.StringWriter w = new java.io.StringWriter(); | 349 | java.io.StringWriter w = new java.io.StringWriter(); |
350 | w.write("placement des frontires \n"); | 350 | w.write("placement des frontières \n"); |
351 | for (int i=0 ; i<topic_boundaries.length ; i++){ | 351 | for (int i=0 ; i<topic_boundaries.length ; i++){ |
352 | w.write(topic_boundaries[i] + "\n"); | 352 | w.write(topic_boundaries[i] + "\n"); |
353 | } | 353 | } |
354 | return w.toString(); | 354 | return w.toString(); |
355 | } | 355 | } |
356 | } | 356 | } |
357 | 357 |
tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/DefaultConfig.java
1 | package LIA_topic_seg; | 1 | package LIA_topic_seg; |
2 | 2 | ||
3 | import javax.xml.parsers.*; | 3 | import javax.xml.parsers.*; |
4 | import org.w3c.dom.*; | 4 | import org.w3c.dom.*; |
5 | import org.xml.sax.*; | 5 | import org.xml.sax.*; |
6 | import java.io.*; | 6 | import java.io.*; |
7 | import javax.xml.transform.dom.*; | 7 | import javax.xml.transform.dom.*; |
8 | import javax.xml.transform.stream.*; | 8 | import javax.xml.transform.stream.*; |
9 | import javax.xml.transform.*; | 9 | import javax.xml.transform.*; |
10 | import java.util.*; | 10 | import java.util.*; |
11 | import org.apache.commons.cli.*; | 11 | import org.apache.commons.cli.*; |
12 | 12 | ||
13 | /** | 13 | /** |
14 | * Cette classe regroupe des paramtres de configuration | 14 | * Cette classe regroupe des paramètres de configuration |
15 | * | 15 | * |
16 | * This product includes software developed by the | 16 | * This product includes software developed by the |
17 | * Apache Software Foundation (http://www.apache.org/)." | 17 | * Apache Software Foundation (http://www.apache.org/)." |
18 | */ | 18 | */ |
19 | public class DefaultConfig | 19 | public class DefaultConfig |
20 | { | 20 | { |
21 | private class CmdLine extends PosixParser | 21 | private class CmdLine extends PosixParser |
22 | { | 22 | { |
23 | final private boolean NEED_ARG = true; | 23 | final private boolean NEED_ARG = true; |
24 | final private boolean DO_NOT_NEED_ARG = false; | 24 | final private boolean DO_NOT_NEED_ARG = false; |
25 | CmdLine(String args[]) throws ParseException | 25 | CmdLine(String args[]) throws ParseException |
26 | { | 26 | { |
27 | super(); | 27 | super(); |
28 | // documentation : http://jakarta.apache.org/commons/cli/apidocs/index.html | 28 | // documentation : http://jakarta.apache.org/commons/cli/apidocs/index.html |
29 | _cl = parse(new Options() | 29 | _cl = parse(new Options() |
30 | .addOption("", "inputDataSentenceXmlTag", NEED_ARG, "") | 30 | .addOption("", "inputDataSentenceXmlTag", NEED_ARG, "") |
31 | .addOption("", "inputDataWordsXmlTag", NEED_ARG, "") | 31 | .addOption("", "inputDataWordsXmlTag", NEED_ARG, "") |
32 | .addOption("", "inputDataLemmaWeightXmlTag", NEED_ARG, "") | 32 | .addOption("", "inputDataLemmaWeightXmlTag", NEED_ARG, "") |
33 | .addOption("", "inputDataSentenceXmlTag", NEED_ARG, "") | 33 | .addOption("", "inputDataSentenceXmlTag", NEED_ARG, "") |
34 | .addOption("", "lexicalChainsHiatus", NEED_ARG, "") | 34 | .addOption("", "lexicalChainsHiatus", NEED_ARG, "") |
35 | .addOption("", "computeChains", NEED_ARG, "") | 35 | .addOption("", "computeChains", NEED_ARG, "") |
36 | .addOption("", "file", NEED_ARG, "") | 36 | .addOption("", "file", NEED_ARG, "") |
37 | .addOption("", "n", NEED_ARG, "") | 37 | .addOption("", "n", NEED_ARG, "") |
38 | .addOption("", "s", NEED_ARG, "") | 38 | .addOption("", "s", NEED_ARG, "") |
39 | .addOption("", "config", NEED_ARG, ""), | 39 | .addOption("", "config", NEED_ARG, ""), |
40 | args); | 40 | args); |
41 | } | 41 | } |
42 | } | 42 | } |
43 | //-------------------------------------------------------------------------- | 43 | //-------------------------------------------------------------------------- |
44 | private CommandLine _cl; | 44 | private CommandLine _cl; |
45 | private HashMap<String, String> _map = new HashMap<String, String>(); | 45 | private HashMap<String, String> _map = new HashMap<String, String>(); |
46 | //-------------------------------------------------------------------------- | 46 | //-------------------------------------------------------------------------- |
47 | public DefaultConfig() throws Exception | 47 | public DefaultConfig() throws Exception |
48 | { | 48 | { |
49 | init(); | 49 | init(); |
50 | } | 50 | } |
51 | //-------------------------------------------------------------------------- | 51 | //-------------------------------------------------------------------------- |
52 | public DefaultConfig(String fileName) throws Exception | 52 | public DefaultConfig(String fileName) throws Exception |
53 | { | 53 | { |
54 | init(); | 54 | init(); |
55 | load(fileName); | 55 | load(fileName); |
56 | } | 56 | } |
57 | //-------------------------------------------------------------------------- | 57 | //-------------------------------------------------------------------------- |
58 | private void init() throws Exception | 58 | private void init() throws Exception |
59 | { | 59 | { |
60 | // tag "phrase" dans le fichier d'entrée | 60 | // tag "phrase" dans le fichier d'entrÈe |
61 | setParam("inputDataSentenceXmlTag","phr"); | 61 | setParam("inputDataSentenceXmlTag","phr"); |
62 | // tag "lemme d'une phrase" dans le fichier d'entrée | 62 | // tag "lemme d'une phrase" dans le fichier d'entrÈe |
63 | setParam("inputDataWordsXmlTag", "wd"); | 63 | setParam("inputDataWordsXmlTag", "wd"); |
64 | // tag "poids d'un lemme dans une phrase" dans le fichier d'entrée | 64 | // tag "poids d'un lemme dans une phrase" dans le fichier d'entrÈe |
65 | setParam("inputDataLemmaXmlTag", "lem"); | 65 | setParam("inputDataLemmaXmlTag", "lem"); |
66 | // tag "poids d'un lemme dans une phrase" dans le fichier d'entrée | 66 | // tag "poids d'un lemme dans une phrase" dans le fichier d'entrÈe |
67 | setParam("inputDataLemmaWeightXmlTag", "poids"); | 67 | setParam("inputDataLemmaWeightXmlTag", "poids"); |
68 | // mode de calcul du hiatus et de sa prise en compte | 68 | // mode de calcul du hiatus et de sa prise en compte |
69 | // rien = pas de prise en compte du hiatus | 69 | // rien = pas de prise en compte du hiatus |
70 | // un nombre = valeur du hiatus | 70 | // un nombre = valeur du hiatus |
71 | // ADAPTIV = valeur du hiatus à calculer localement | 71 | // ADAPTIV = valeur du hiatus ‡ calculer localement |
72 | setParam("lexicalChainsHiatus", "11"); | 72 | setParam("lexicalChainsHiatus", "11"); |
73 | setParam("computeChains", "weight"); | 73 | setParam("computeChains", "weight"); |
74 | } | 74 | } |
75 | //-------------------------------------------------------------------------- | 75 | //-------------------------------------------------------------------------- |
76 | public void load(String fileName) throws Exception | 76 | public void load(String fileName) throws Exception |
77 | { | 77 | { |
78 | try | 78 | try |
79 | { | 79 | { |
80 | Document doc = DocumentBuilderFactory.newInstance() | 80 | Document doc = DocumentBuilderFactory.newInstance() |
81 | .newDocumentBuilder().parse(new File(fileName)); | 81 | .newDocumentBuilder().parse(new File(fileName)); |
82 | Element nn = doc.getDocumentElement(); | 82 | Element nn = doc.getDocumentElement(); |
83 | if (nn.getTagName() != "Config") | 83 | if (nn.getTagName() != "Config") |
84 | throw new Exception("Unexpected tag : "+nn.getTagName()); | 84 | throw new Exception("Unexpected tag : "+nn.getTagName()); |
85 | String configVersion = "1.0"; // default version | 85 | String configVersion = "1.0"; // default version |
86 | Attr a = nn.getAttributeNode("version"); | 86 | Attr a = nn.getAttributeNode("version"); |
87 | if (a != null) | 87 | if (a != null) |
88 | configVersion = a.getTextContent(); | 88 | configVersion = a.getTextContent(); |
89 | if (configVersion.equals("1.0")) | 89 | if (configVersion.equals("1.0")) |
90 | { | 90 | { |
91 | NodeList paramNodeList = doc.getElementsByTagName("Param"); | 91 | NodeList paramNodeList = doc.getElementsByTagName("Param"); |
92 | for (int i=0; i<paramNodeList.getLength(); i++) | 92 | for (int i=0; i<paramNodeList.getLength(); i++) |
93 | { | 93 | { |
94 | Node n = paramNodeList.item(i); | 94 | Node n = paramNodeList.item(i); |
95 | setParam(n.getAttributes().getNamedItem("name").getTextContent(), | 95 | setParam(n.getAttributes().getNamedItem("name").getTextContent(), |
96 | n.getTextContent()); | 96 | n.getTextContent()); |
97 | } | 97 | } |
98 | } | 98 | } |
99 | else | 99 | else |
100 | throw new Exception("Unsupported version : "+configVersion); | 100 | throw new Exception("Unsupported version : "+configVersion); |
101 | } | 101 | } |
102 | catch(Exception e) { throw e; } | 102 | catch(Exception e) { throw e; } |
103 | } | 103 | } |
104 | //-------------------------------------------------------------------------- | 104 | //-------------------------------------------------------------------------- |
105 | /** | 105 | /** |
106 | * @param n name of parameter | 106 | * @param n name of parameter |
107 | * @param c content of parameter | 107 | * @param c content of parameter |
108 | */ | 108 | */ |
109 | public void setParam(String n, String c) throws Exception | 109 | public void setParam(String n, String c) throws Exception |
110 | { | 110 | { |
111 | if (n.equals("lexicalChainsHiatus")) | 111 | if (n.equals("lexicalChainsHiatus")) |
112 | { | 112 | { |
113 | if (!c.equals("") && !c.equals("ADAPTIVE")) | 113 | if (!c.equals("") && !c.equals("ADAPTIVE")) |
114 | Integer.parseInt(c); // throws exception if cannot convert to integer | 114 | Integer.parseInt(c); // throws exception if cannot convert to integer |
115 | } | 115 | } |
116 | else if (n.equals("computeChains")) | 116 | else if (n.equals("computeChains")) |
117 | { | 117 | { |
118 | if (!c.equals("yes") && !c.equals("no") && !c.equals("weight")) | 118 | if (!c.equals("yes") && !c.equals("no") && !c.equals("weight")) |
119 | throw new Exception("invalid parameter 'computeWeight'. Must be 'yes' or 'no'"); | 119 | throw new Exception("invalid parameter 'computeWeight'. Must be 'yes' or 'no'"); |
120 | } | 120 | } |
121 | _map.put(n, c); | 121 | _map.put(n, c); |
122 | } | 122 | } |
123 | //-------------------------------------------------------------------------- | 123 | //-------------------------------------------------------------------------- |
124 | /** | 124 | /** |
125 | * @param n name of parameter | 125 | * @param n name of parameter |
126 | * @return true if parameter exists; false otherwise | 126 | * @return true if parameter exists; false otherwise |
127 | */ | 127 | */ |
128 | public boolean containsParam(String n) | 128 | public boolean containsParam(String n) |
129 | { | 129 | { |
130 | return _map.containsKey(n); | 130 | return _map.containsKey(n); |
131 | } | 131 | } |
132 | //-------------------------------------------------------------------------- | 132 | //-------------------------------------------------------------------------- |
133 | /** | 133 | /** |
134 | * Cette fonction permet d'accŽder aux paramtres, qu'ils aient ŽtŽ mis par dŽfaut, ou passŽs par le fichier de configuration, | 134 | * Cette fonction permet d'accéder aux paramètres, qu'ils aient été mis par défaut, ou passés par le fichier de configuration, |
135 | * ou encore passŽs en ligne de commande. | 135 | * ou encore passés en ligne de commande. |
136 | * @param n name of parameter | 136 | * @param n name of parameter |
137 | * @return content of parameter or null if the parameter does not exist | 137 | * @return content of parameter or null if the parameter does not exist |
138 | */ | 138 | */ |
139 | public String getParam(String n) | 139 | public String getParam(String n) |
140 | { | 140 | { |
141 | return _map.get(n); | 141 | return _map.get(n); |
142 | } | 142 | } |
143 | //-------------------------------------------------------------------------- | 143 | //-------------------------------------------------------------------------- |
144 | /** | 144 | /** |
145 | * Cette fonction permet de rŽcupŽrer les paramtres passŽs en ligne de commande | 145 | * Cette fonction permet de récupérer les paramètres passés en ligne de commande |
146 | * les valeurs sont prioritaires sur le fichier de configuration en cas de conflit. | 146 | * les valeurs sont prioritaires sur le fichier de configuration en cas de conflit. |
147 | */ | 147 | */ |
148 | public String[] setParamsFromCmdLine(String[] args) throws Exception | 148 | public String[] setParamsFromCmdLine(String[] args) throws Exception |
149 | { | 149 | { |
150 | new CmdLine(args); | 150 | new CmdLine(args); |
151 | Option[] t = _cl.getOptions(); | 151 | Option[] t = _cl.getOptions(); |
152 | for (int i=0; i<t.length; i++) | 152 | for (int i=0; i<t.length; i++) |
153 | setParam(t[i].getLongOpt(), t[i].getValue("")); | 153 | setParam(t[i].getLongOpt(), t[i].getValue("")); |
154 | return _cl.getArgs(); // returns unrecognized args (file list for example) | 154 | return _cl.getArgs(); // returns unrecognized args (file list for example) |
155 | } | 155 | } |
156 | //-------------------------------------------------------------------------- | 156 | //-------------------------------------------------------------------------- |
157 | public void save(String fileName) throws Exception | 157 | public void save(String fileName) throws Exception |
158 | { | 158 | { |
159 | FileWriter w = new FileWriter(new File(fileName)); | 159 | FileWriter w = new FileWriter(new File(fileName)); |
160 | w.write("<?xml version=\"1.0\"?>"); | 160 | w.write("<?xml version=\"1.0\"?>"); |
161 | w.write("\n<Config version=\"1.0\">"); | 161 | w.write("\n<Config version=\"1.0\">"); |
162 | Set<String> set = _map.keySet(); | 162 | Set<String> set = _map.keySet(); |
163 | for (Iterator<String> i = set.iterator(); i.hasNext();) | 163 | for (Iterator<String> i = set.iterator(); i.hasNext();) |
164 | { | 164 | { |
165 | String name = i.next(); | 165 | String name = i.next(); |
166 | w.write("\n <Param name=\""+name+"\">"+getParam(name)+"</Param>"); | 166 | w.write("\n <Param name=\""+name+"\">"+getParam(name)+"</Param>"); |
167 | } | 167 | } |
168 | w.write("\n</Config>"); | 168 | w.write("\n</Config>"); |
169 | w.close(); | 169 | w.close(); |
170 | } | 170 | } |
171 | //-------------------------------------------------------------------------- | 171 | //-------------------------------------------------------------------------- |
172 | public String toString() | 172 | public String toString() |
173 | { | 173 | { |
174 | StringWriter w = new StringWriter(); | 174 | StringWriter w = new StringWriter(); |
175 | w.write(super.toString()+"\n"); | 175 | w.write(super.toString()+"\n"); |
176 | Set<String> set = _map.keySet(); | 176 | Set<String> set = _map.keySet(); |
177 | for (Iterator<String> i = set.iterator(); i.hasNext();) | 177 | for (Iterator<String> i = set.iterator(); i.hasNext();) |
178 | { | 178 | { |
179 | String name = i.next(); | 179 | String name = i.next(); |
180 | w.write(" "+name+"("+getParam(name)+")\n"); | 180 | w.write(" "+name+"("+getParam(name)+")\n"); |
181 | } | 181 | } |
182 | return w.toString(); | 182 | return w.toString(); |
183 | } | 183 | } |
184 | } | 184 | } |
tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/DefaultGapsScores.java
1 | package LIA_topic_seg; | 1 | package LIA_topic_seg; |
2 | 2 | ||
3 | import java.util.*; | 3 | import java.util.*; |
4 | /** | 4 | /** |
5 | * Cette classe permet le calcul de probabililtŽs de rupture ˆ chaque intervalle entre deux phrases, ou unitŽs textuelles. | 5 | * Cette classe permet le calcul de probabililtés de rupture à chaque intervalle entre deux phrases, ou unités textuelles. |
6 | * Les calculs implŽmentŽs sont la similaritŽ cosine et les profondeurs de dissimilaritŽ. | 6 | * Les calculs implémentés sont la similarité cosine et les profondeurs de dissimilarité. |
7 | * | 7 | * |
8 | * | 8 | * |
9 | */ | 9 | */ |
10 | public class DefaultGapsScores implements GapsScores{ | 10 | public class DefaultGapsScores implements GapsScores{ |
11 | 11 | ||
12 | LexicalChainList chains; | 12 | LexicalChainList chains; |
13 | float[] gaps_scores = null; | 13 | float[] gaps_scores = null; |
14 | int sentence_count = 0; | 14 | int sentence_count = 0; |
15 | static int SIM_WINDOW = 3; | 15 | static int SIM_WINDOW = 3; |
16 | 16 | ||
17 | public DefaultGapsScores (LexicalChainList lcl, int sc){ | 17 | public DefaultGapsScores (LexicalChainList lcl, int sc){ |
18 | //crŽation du tableau des probas de rupture pour chaque phrase/sŽquence | 18 | //création du tableau des probas de rupture pour chaque phrase/séquence |
19 | chains = lcl; | 19 | chains = lcl; |
20 | sentence_count = sc; | 20 | sentence_count = sc; |
21 | // System.out.print("nombre de phrases traitŽse : " + sc); | 21 | // System.out.print("nombre de phrases traitése : " + sc); |
22 | compute_cos(); | 22 | compute_cos(); |
23 | 23 | ||
24 | // for (int i= 0 ; i<sc; i++){ | 24 | // for (int i= 0 ; i<sc; i++){ |
25 | // gaps_scores[i]=0; | 25 | // gaps_scores[i]=0; |
26 | // } | 26 | // } |
27 | 27 | ||
28 | } | 28 | } |
29 | 29 | ||
30 | public DefaultGapsScores (LexicalChainList lcl, DefaultInputData in){ | 30 | public DefaultGapsScores (LexicalChainList lcl, DefaultInputData in){ |
31 | //crŽation du tableau des probas de rupture pour chaque phrase/sŽquence | 31 | //création du tableau des probas de rupture pour chaque phrase/séquence |
32 | chains = lcl; | 32 | chains = lcl; |
33 | sentence_count = in.sentenceCount(); | 33 | sentence_count = in.sentenceCount(); |
34 | compute_cos(); | 34 | compute_cos(); |
35 | 35 | ||
36 | } | 36 | } |
37 | 37 | ||
38 | /** | 38 | /** |
39 | * transforme l'attribut gaps_scores en des scores de similaritŽs => on recherchera les plus petits | 39 | * transforme l'attribut gaps_scores en des scores de similarités => on recherchera les plus petits |
40 | * | 40 | * |
41 | */ | 41 | */ |
42 | public void compute_cos(){ | 42 | public void compute_cos(){ |
43 | // transforme gaps_scores en des scores de similaritŽs => on recherchera les + petits | 43 | // transforme gaps_scores en des scores de similarités => on recherchera les + petits |
44 | gaps_scores = new float[sentence_count-1]; | 44 | gaps_scores = new float[sentence_count-1]; |
45 | for (int senti = 0 ; senti< sentence_count-1 ; senti++){ | 45 | for (int senti = 0 ; senti< sentence_count-1 ; senti++){ |
46 | float sup = 0; | 46 | float sup = 0; |
47 | float inf1 = 0; | 47 | float inf1 = 0; |
48 | float inf2 = 0; | 48 | float inf2 = 0; |
49 | 49 | ||
50 | 50 | ||
51 | for (int lem=0 ; lem< chains.lemmaCount() ; lem++){ | 51 | for (int lem=0 ; lem< chains.lemmaCount() ; lem++){ |
52 | float wa = 0; | 52 | float wa = 0; |
53 | float wb = 0; | 53 | float wb = 0; |
54 | 54 | ||
55 | for (int sentj = senti ; sentj>senti-SIM_WINDOW && sentj>=0; sentj--){ | 55 | for (int sentj = senti ; sentj>senti-SIM_WINDOW && sentj>=0; sentj--){ |
56 | if (chains.weight(lem,sentj) > wa){ | 56 | if (chains.weight(lem,sentj) > wa){ |
57 | wa = chains.weight(lem,sentj); | 57 | wa = chains.weight(lem,sentj); |
58 | } | 58 | } |
59 | } | 59 | } |
60 | for (int sentk = senti+1 ; sentk<=senti+SIM_WINDOW && sentk<sentence_count ; sentk++){ | 60 | for (int sentk = senti+1 ; sentk<=senti+SIM_WINDOW && sentk<sentence_count ; sentk++){ |
61 | if (chains.weight(lem,sentk) > wb){ | 61 | if (chains.weight(lem,sentk) > wb){ |
62 | wb = chains.weight(lem,sentk); | 62 | wb = chains.weight(lem,sentk); |
63 | } | 63 | } |
64 | } | 64 | } |
65 | 65 | ||
66 | sup += wa * wb; | 66 | sup += wa * wb; |
67 | inf1 += wa * wa; | 67 | inf1 += wa * wa; |
68 | inf2 += wb * wb; | 68 | inf2 += wb * wb; |
69 | 69 | ||
70 | } | 70 | } |
71 | if (inf1 * inf2 != 0){ | 71 | if (inf1 * inf2 != 0){ |
72 | gaps_scores[senti]= sup / (float)Math.sqrt(inf1 * inf2); | 72 | gaps_scores[senti]= sup / (float)Math.sqrt(inf1 * inf2); |
73 | } | 73 | } |
74 | else { | 74 | else { |
75 | gaps_scores[senti]= 0; | 75 | gaps_scores[senti]= 0; |
76 | } | 76 | } |
77 | 77 | ||
78 | } | 78 | } |
79 | 79 | ||
80 | } | 80 | } |
81 | 81 | ||
82 | /** | 82 | /** |
83 | * Cette fonction opre un lissage sur l'attribut gaps_scores, pour chaque valeur elle la remplace | 83 | * Cette fonction opère un lissage sur l'attribut gaps_scores, pour chaque valeur elle la remplace |
84 | * par la moyenne avec les valeurs prŽcŽdente et suivante. | 84 | * par la moyenne avec les valeurs précédente et suivante. |
85 | * @param w : fentre de lissage : elle est Žgale ˆ 1 quoi qu'il arrive | 85 | * @param w : fenêtre de lissage : elle est égale à 1 quoi qu'il arrive |
86 | */ | 86 | */ |
87 | public void compute_smoothing(int w){ | 87 | public void compute_smoothing(int w){ |
88 | //w est la fentre de lissage | 88 | //w est la fenêtre de lissage |
89 | float[] smooth_cos = new float[gaps_scores.length] ; | 89 | float[] smooth_cos = new float[gaps_scores.length] ; |
90 | smooth_cos[0]= (gaps_scores[1]+2*gaps_scores[0])/3; | 90 | smooth_cos[0]= (gaps_scores[1]+2*gaps_scores[0])/3; |
91 | for (int i=1 ; i<gaps_scores.length-1 ; i++){ | 91 | for (int i=1 ; i<gaps_scores.length-1 ; i++){ |
92 | smooth_cos[i]= (gaps_scores[i-1]+gaps_scores[i+1]+2*gaps_scores[i])/4 ; | 92 | smooth_cos[i]= (gaps_scores[i-1]+gaps_scores[i+1]+2*gaps_scores[i])/4 ; |
93 | 93 | ||
94 | } | 94 | } |
95 | smooth_cos[gaps_scores.length-1]=(gaps_scores[gaps_scores.length-2]+gaps_scores[gaps_scores.length-1])/2; | 95 | smooth_cos[gaps_scores.length-1]=(gaps_scores[gaps_scores.length-2]+gaps_scores[gaps_scores.length-1])/2; |
96 | //System.out.print("dernier calculŽ" + smooth_cos[gaps_scores.length-1]); | 96 | //System.out.print("dernier calculé" + smooth_cos[gaps_scores.length-1]); |
97 | 97 | ||
98 | gaps_scores = smooth_cos.clone(); | 98 | gaps_scores = smooth_cos.clone(); |
99 | } | 99 | } |
100 | 100 | ||
101 | /** | 101 | /** |
102 | * Cette fonction, aprs calcul des similaritŽs, permet de sŽlectionner les frontires candidates | 102 | * Cette fonction, après calcul des similarités, permet de sélectionner les frontières candidates |
103 | * en recherchant les minimas locaux et en leur attribuant des valeurs liŽes ˆ la profondeur | 103 | * en recherchant les minimas locaux et en leur attribuant des valeurs liées à la profondeur |
104 | * de dissimilaritŽ. | 104 | * de dissimilarité. |
105 | * Les rŽsultats sont directement reportŽs dans l'attribut gaps_scores | 105 | * Les résultats sont directement reportés dans l'attribut gaps_scores |
106 | * @return : le nombre de candidats pour lesquels une valeur a ŽtŽ calculŽe. | 106 | * @return : le nombre de candidats pour lesquels une valeur a été calculée. |
107 | */ | 107 | */ |
108 | public float compute_depth_scores(){ // retourne le nombre de depth calculŽes | 108 | public float compute_depth_scores(){ // retourne le nombre de depth calculées |
109 | //transforme gaps_scores en des scores de profondeur => on recherchera les + grands | 109 | //transforme gaps_scores en des scores de profondeur => on recherchera les + grands |
110 | int count = 0; | 110 | int count = 0; |
111 | float[] depth_scores = new float [gaps_scores.length]; | 111 | float[] depth_scores = new float [gaps_scores.length]; |
112 | depth_scores[0]=0; | 112 | depth_scores[0]=0; |
113 | depth_scores[gaps_scores.length-1]=0; | 113 | depth_scores[gaps_scores.length-1]=0; |
114 | for (int i=1 ; i<gaps_scores.length-1 ; i++){ | 114 | for (int i=1 ; i<gaps_scores.length-1 ; i++){ |
115 | if (gaps_scores[i-1]>gaps_scores[i] && gaps_scores[i+1]>gaps_scores[i]){ | 115 | if (gaps_scores[i-1]>gaps_scores[i] && gaps_scores[i+1]>gaps_scores[i]){ |
116 | // on ne calcule les scores que des candidats, c'est ˆ dire les minimas locaux | 116 | // on ne calcule les scores que des candidats, c'est à dire les minimas locaux |
117 | float lmax = 0; | 117 | float lmax = 0; |
118 | float rmax = 0; | 118 | float rmax = 0; |
119 | 119 | ||
120 | int j = i-1; | 120 | int j = i-1; |
121 | while (gaps_scores[j]>lmax){ | 121 | while (gaps_scores[j]>lmax){ |
122 | lmax = gaps_scores[j]; | 122 | lmax = gaps_scores[j]; |
123 | } | 123 | } |
124 | j = i+1; | 124 | j = i+1; |
125 | while (gaps_scores[j]>rmax){ | 125 | while (gaps_scores[j]>rmax){ |
126 | rmax = gaps_scores[j]; | 126 | rmax = gaps_scores[j]; |
127 | } | 127 | } |
128 | depth_scores[i]= (rmax + lmax - 2 * gaps_scores[i])/2; | 128 | depth_scores[i]= (rmax + lmax - 2 * gaps_scores[i])/2; |
129 | count ++; | 129 | count ++; |
130 | } | 130 | } |
131 | else{ | 131 | else{ |
132 | depth_scores[i]=0; | 132 | depth_scores[i]=0; |
133 | } | 133 | } |
134 | } | 134 | } |
135 | 135 | ||
136 | gaps_scores = depth_scores.clone(); | 136 | gaps_scores = depth_scores.clone(); |
137 | return count; | 137 | return count; |
138 | 138 | ||
139 | } | 139 | } |
140 | 140 | ||
141 | // private void compute_C99(){ | 141 | // private void compute_C99(){ |
142 | // | 142 | // |
143 | // | 143 | // |
144 | // } | 144 | // } |
145 | 145 | ||
146 | 146 | ||
147 | public float[] values(){ | 147 | public float[] values(){ |
148 | 148 | ||
149 | return gaps_scores; | 149 | return gaps_scores; |
150 | 150 | ||
151 | } | 151 | } |
152 | 152 | ||
153 | public float bound_value(int bound){ | 153 | public float bound_value(int bound){ |
154 | 154 | ||
155 | return gaps_scores[bound]; | 155 | return gaps_scores[bound]; |
156 | 156 | ||
157 | } | 157 | } |
158 | 158 | ||
159 | public String to_string(){ | 159 | public String to_string(){ |
160 | java.io.StringWriter w = new java.io.StringWriter(); | 160 | java.io.StringWriter w = new java.io.StringWriter(); |
161 | w.write(super.toString()+"\n"); | 161 | w.write(super.toString()+"\n"); |
162 | for (int i=0 ; i<gaps_scores.length ; i++){ | 162 | for (int i=0 ; i<gaps_scores.length ; i++){ |
163 | 163 | ||
164 | w.write("GAP " + i + " - " + (i+1) + " : " + gaps_scores[i] +"\n"); | 164 | w.write("GAP " + i + " - " + (i+1) + " : " + gaps_scores[i] +"\n"); |
165 | 165 | ||
166 | } | 166 | } |
167 | return w.toString(); | 167 | return w.toString(); |
168 | } | 168 | } |
169 | 169 | ||
170 | } | 170 | } |
171 | 171 |
tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/DefaultInputData.java
1 | package LIA_topic_seg; | 1 | package LIA_topic_seg; |
2 | 2 | ||
3 | import javax.xml.parsers.*; | 3 | import javax.xml.parsers.*; |
4 | import org.w3c.dom.*; | 4 | import org.w3c.dom.*; |
5 | import org.xml.sax.*; | 5 | import org.xml.sax.*; |
6 | import java.io.*; | 6 | import java.io.*; |
7 | import javax.xml.transform.dom.*; | 7 | import javax.xml.transform.dom.*; |
8 | import javax.xml.transform.stream.*; | 8 | import javax.xml.transform.stream.*; |
9 | import javax.xml.transform.*; | 9 | import javax.xml.transform.*; |
10 | import java.util.*; | 10 | import java.util.*; |
11 | 11 | ||
12 | /** | 12 | /** |
13 | * Cette classe permet de charger les informations du fichier d'entrŽe, ainsi que d'Žditer le rŽsultat de la segmentation. | 13 | * Cette classe permet de charger les informations du fichier d'entrée, ainsi que d'éditer le résultat de la segmentation. |
14 | * Le fichier d'entrŽe doit tre au format XML et les balises utilisŽes sont dŽterminŽes dans le fichier de configuration. | 14 | * Le fichier d'entrée doit être au format XML et les balises utilisées sont déterminées dans le fichier de configuration. |
15 | */ | 15 | */ |
16 | public class DefaultInputData | 16 | public class DefaultInputData |
17 | { | 17 | { |
18 | //-------------------------------------------------------------------------- | 18 | //-------------------------------------------------------------------------- |
19 | 19 | ||
20 | /** | 20 | /** |
21 | * la configuration, et donc les paramtres sont copiŽs dans l'objet | 21 | * la configuration, et donc les paramètres sont copiés dans l'objet |
22 | */ | 22 | */ |
23 | DefaultConfig config; | 23 | DefaultConfig config; |
24 | 24 | ||
25 | /** | 25 | /** |
26 | * Le dictionnaire des lemmes est Žgalement portŽ par la reprŽsentation des donnŽes d'entrŽe | 26 | * Le dictionnaire des lemmes est également porté par la représentation des données d'entrée |
27 | */ | 27 | */ |
28 | LemmaDict lemmaDict = new LemmaDict(); | 28 | LemmaDict lemmaDict = new LemmaDict(); |
29 | private Sentence[] _sentenceList; | 29 | private Sentence[] _sentenceList; |
30 | //-------------------------------------------------------------------------- | 30 | //-------------------------------------------------------------------------- |
31 | 31 | ||
32 | public DefaultInputData(DefaultConfig c, String file) throws Exception | 32 | public DefaultInputData(DefaultConfig c, String file) throws Exception |
33 | { | 33 | { |
34 | config = c; | 34 | config = c; |
35 | try | 35 | try |
36 | { | 36 | { |
37 | NodeList sentenceNodeList = DocumentBuilderFactory.newInstance() | 37 | NodeList sentenceNodeList = DocumentBuilderFactory.newInstance() |
38 | .newDocumentBuilder().parse(new File(file)) | 38 | .newDocumentBuilder().parse(new File(file)) |
39 | .getElementsByTagName(config | 39 | .getElementsByTagName(config |
40 | .getParam("inputDataSentenceXmlTag")); | 40 | .getParam("inputDataSentenceXmlTag")); |
41 | int sentenceCount = sentenceNodeList.getLength(); | 41 | int sentenceCount = sentenceNodeList.getLength(); |
42 | _sentenceList = new Sentence[sentenceCount]; | 42 | _sentenceList = new Sentence[sentenceCount]; |
43 | 43 | ||
44 | for (int i=0; i<sentenceCount; i++) | 44 | for (int i=0; i<sentenceCount; i++) |
45 | { | 45 | { |
46 | Sentence sentence = new Sentence(); | 46 | Sentence sentence = new Sentence(); |
47 | NodeList childList = sentenceNodeList.item(i).getChildNodes(); | 47 | NodeList childList = sentenceNodeList.item(i).getChildNodes(); |
48 | int childCount = childList.getLength(); | 48 | int childCount = childList.getLength(); |
49 | for (int j=0; j<childCount; j++) | 49 | for (int j=0; j<childCount; j++) |
50 | { | 50 | { |
51 | Node node = childList.item(j); | 51 | Node node = childList.item(j); |
52 | String nodeName = node.getNodeName(); | 52 | String nodeName = node.getNodeName(); |
53 | if (nodeName.equals(config.getParam("inputDataWordsXmlTag"))) | 53 | if (nodeName.equals(config.getParam("inputDataWordsXmlTag"))) |
54 | sentence.content = node.getFirstChild().getTextContent(); | 54 | sentence.content = node.getFirstChild().getTextContent(); |
55 | else if (nodeName.equals(config.getParam("inputDataLemmaXmlTag"))) | 55 | else if (nodeName.equals(config.getParam("inputDataLemmaXmlTag"))) |
56 | { | 56 | { |
57 | float w = 0; // weight | 57 | float w = 0; // weight |
58 | Node n = node.getAttributes().getNamedItem(config | 58 | Node n = node.getAttributes().getNamedItem(config |
59 | .getParam("inputDataLemmaWeightXmlTag")); | 59 | .getParam("inputDataLemmaWeightXmlTag")); |
60 | if (n != null) | 60 | if (n != null) |
61 | w = Float.parseFloat(n.getFirstChild().getTextContent()); | 61 | w = Float.parseFloat(n.getFirstChild().getTextContent()); |
62 | int lemmaCode = lemmaDict.add( | 62 | int lemmaCode = lemmaDict.add( |
63 | node.getFirstChild().getTextContent(), w, i); | 63 | node.getFirstChild().getTextContent(), w, i); |
64 | sentence.addLemma(lemmaCode, w); | 64 | sentence.addLemma(lemmaCode, w); |
65 | } | 65 | } |
66 | } | 66 | } |
67 | _sentenceList[i] = sentence; | 67 | _sentenceList[i] = sentence; |
68 | } | 68 | } |
69 | } | 69 | } |
70 | catch(Exception e) { throw e; } | 70 | catch(Exception e) { throw e; } |
71 | } | 71 | } |
72 | //-------------------------------------------------------------------------- | 72 | //-------------------------------------------------------------------------- |
73 | /** | 73 | /** |
74 | * Cette fonction est utilisŽe principalement pour le dŽbuggage, pour obtenir une trace des donnŽes d'entrŽe. | 74 | * Cette fonction est utilisée principalement pour le débuggage, pour obtenir une trace des données d'entrée. |
75 | */ | 75 | */ |
76 | public String toString() | 76 | public String toString() |
77 | 77 | ||
78 | { | 78 | { |
79 | java.io.StringWriter w = new java.io.StringWriter(); | 79 | java.io.StringWriter w = new java.io.StringWriter(); |
80 | w.write(super.toString()+"\n"); | 80 | w.write(super.toString()+"\n"); |
81 | for (int i=0; i<sentenceCount(); i++) | 81 | for (int i=0; i<sentenceCount(); i++) |
82 | { | 82 | { |
83 | Sentence sent = _sentenceList[i]; | 83 | Sentence sent = _sentenceList[i]; |
84 | w.write("SENTENCE #"+i | 84 | w.write("SENTENCE #"+i |
85 | +" wordCount("+sent.wordCount()+")" | 85 | +" wordCount("+sent.wordCount()+")" |
86 | +" content("+sent.content+")\n"); | 86 | +" content("+sent.content+")\n"); |
87 | 87 | ||
88 | for (int j=0; j<sent.lemmaCount(); j++) | 88 | for (int j=0; j<sent.lemmaCount(); j++) |
89 | { | 89 | { |
90 | Sentence.Lemma l = sent.lemmaObject(j); | 90 | Sentence.Lemma l = sent.lemmaObject(j); |
91 | w.write(" LEMMA #"+j | 91 | w.write(" LEMMA #"+j |
92 | +" content("+lemmaDict.lemmaObject(l.code).content+")" | 92 | +" content("+lemmaDict.lemmaObject(l.code).content+")" |
93 | +" code("+l.code+")" | 93 | +" code("+l.code+")" |
94 | +" weight("+l.weight+")" | 94 | +" weight("+l.weight+")" |
95 | //+" occurences("+sent.lemmaOccurences(l.code)+")" | 95 | //+" occurences("+sent.lemmaOccurences(l.code)+")" |
96 | +"\n"); | 96 | +"\n"); |
97 | } | 97 | } |
98 | } | 98 | } |
99 | return w.toString(); | 99 | return w.toString(); |
100 | } | 100 | } |
101 | 101 | ||
102 | 102 | ||
103 | /** | 103 | /** |
104 | * Cette fonction permet d'Žditer le rŽsultat de la segmentation au mme format que le fichier d'entrŽe, avec des balises <seg> pour dŽlilmiter les segments thŽmatiques | 104 | * Cette fonction permet d'éditer le résultat de la segmentation au même format que le fichier d'entrée, avec des balises <seg> pour délilmiter les segments thématiques |
105 | * @param bounds : il s'agit de l'objet contenant le calcul des frontires thŽmatiques | 105 | * @param bounds : il s'agit de l'objet contenant le calcul des frontières thématiques |
106 | * @return : La fonction renvoie un objet de type String, qui peut ensuite tre affichŽ ˆ l'Žcran ou bien redirigŽ vers un fichier de sortie. | 106 | * @return : La fonction renvoie un objet de type String, qui peut ensuite être affiché à l'écran ou bien redirigé vers un fichier de sortie. |
107 | */ | 107 | */ |
108 | public String result_complete (Boundaries bounds){ | 108 | public String result_complete (Boundaries bounds){ |
109 | int[] boundaries = bounds.position_boundaries().clone(); | 109 | int[] boundaries = bounds.position_boundaries().clone(); |
110 | Arrays.sort(boundaries); | 110 | Arrays.sort(boundaries); |
111 | int count = 0; | 111 | int count = 0; |
112 | int next = boundaries[0]; | 112 | int next = boundaries[0]; |
113 | 113 | ||
114 | java.io.StringWriter w = new java.io.StringWriter(); | 114 | java.io.StringWriter w = new java.io.StringWriter(); |
115 | w.write ("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<!DOCTYPE Segmentation>\n<Segmentation>\n<seg>\n"); | 115 | w.write ("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<!DOCTYPE Segmentation>\n<Segmentation>\n<seg>\n"); |
116 | for (int i=0; i<sentenceCount(); i++){ | 116 | for (int i=0; i<sentenceCount(); i++){ |
117 | 117 | ||
118 | w.write("<" + config.getParam("inputDataSentenceXmlTag") + ">"); | 118 | w.write("<" + config.getParam("inputDataSentenceXmlTag") + ">"); |
119 | Sentence sent = _sentenceList[i]; | 119 | Sentence sent = _sentenceList[i]; |
120 | w.write("<" + config.getParam("inputDataWordsXmlTag") + ">" + sent.content + "</" + config.getParam("inputDataWordsXmlTag") + ">"); | 120 | w.write("<" + config.getParam("inputDataWordsXmlTag") + ">" + sent.content + "</" + config.getParam("inputDataWordsXmlTag") + ">"); |
121 | for (int j=0; j<sent.lemmaCount(); j++) | 121 | for (int j=0; j<sent.lemmaCount(); j++) |
122 | { | 122 | { |
123 | Sentence.Lemma l = sent.lemmaObject(j); | 123 | Sentence.Lemma l = sent.lemmaObject(j); |
124 | w.write("<"+config.getParam("inputDataLemmaXmlTag") + " " | 124 | w.write("<"+config.getParam("inputDataLemmaXmlTag") + " " |
125 | + config.getParam("inputDataLemmaWeightXmlTag")+ "=" + l.weight + ">" | 125 | + config.getParam("inputDataLemmaWeightXmlTag")+ "=" + l.weight + ">" |
126 | + lemmaDict.lemmaObject(l.code).content | 126 | + lemmaDict.lemmaObject(l.code).content |
127 | +"</" + config.getParam("inputDataLemmaXmlTag") + ">"); | 127 | +"</" + config.getParam("inputDataLemmaXmlTag") + ">"); |
128 | } | 128 | } |
129 | w.write("</" + config.getParam("inputDataSentenceXmlTag") + ">\n"); | 129 | w.write("</" + config.getParam("inputDataSentenceXmlTag") + ">\n"); |
130 | if (i == next) | 130 | if (i == next) |
131 | { | 131 | { |
132 | if (count<boundaries.length-1) | 132 | if (count<boundaries.length-1) |
133 | { | 133 | { |
134 | count ++; | 134 | count ++; |
135 | next = boundaries[count]; | 135 | next = boundaries[count]; |
136 | } | 136 | } |
137 | w.write("</seg>\n<seg>\n"); | 137 | w.write("</seg>\n<seg>\n"); |
138 | 138 | ||
139 | } | 139 | } |
140 | } | 140 | } |
141 | w.write ("</seg>\n</Segmentation>"); | 141 | w.write ("</seg>\n</Segmentation>"); |
142 | return w.toString(); | 142 | return w.toString(); |
143 | } | 143 | } |
144 | 144 | ||
145 | /** | 145 | /** |
146 | * Cette fonction permet d'Žditer le rŽsultat de la segmentation format XML, avec des balises <seg> pour dŽlilmiter les segments thŽmatiques | 146 | * Cette fonction permet d'éditer le résultat de la segmentation format XML, avec des balises <seg> pour délilmiter les segments thématiques |
147 | * et les mme balises que le fichier d'entrŽe pour dŽlimiter les phrases et leur contenu textuel. | 147 | * et les même balises que le fichier d'entrée pour délimiter les phrases et leur contenu textuel. |
148 | * @param bounds : il s'agit de l'objet contenant le calcul des frontires thŽmatiques | 148 | * @param bounds : il s'agit de l'objet contenant le calcul des frontières thématiques |
149 | * @return : La fonction renvoie un objet de type String, qui peut ensuite tre affichŽ ˆ l'Žcran ou bien redirigŽ vers un fichier de sortie. | 149 | * @return : La fonction renvoie un objet de type String, qui peut ensuite être affiché à l'écran ou bien redirigé vers un fichier de sortie. |
150 | */ | 150 | */ |
151 | public String result_text_only(Boundaries bounds){ | 151 | public String result_text_only(Boundaries bounds){ |
152 | int[] boundaries = bounds.position_boundaries().clone(); | 152 | int[] boundaries = bounds.position_boundaries().clone(); |
153 | Arrays.sort(boundaries); | 153 | Arrays.sort(boundaries); |
154 | int count = 0; | 154 | int count = 0; |
155 | int next = boundaries[0]; | 155 | int next = boundaries[0]; |
156 | 156 | ||
157 | java.io.StringWriter w = new java.io.StringWriter(); | 157 | java.io.StringWriter w = new java.io.StringWriter(); |
158 | w.write ("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<!DOCTYPE Segmentation>\n<Segmentation>\n<seg>\n"); | 158 | w.write ("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<!DOCTYPE Segmentation>\n<Segmentation>\n<seg>\n"); |
159 | for (int i=0; i<sentenceCount(); i++){ | 159 | for (int i=0; i<sentenceCount(); i++){ |
160 | 160 | ||
161 | w.write("<" + config.getParam("inputDataSentenceXmlTag") + ">"); | 161 | w.write("<" + config.getParam("inputDataSentenceXmlTag") + ">"); |
162 | Sentence sent = _sentenceList[i]; | 162 | Sentence sent = _sentenceList[i]; |
163 | w.write("<" + config.getParam("inputDataWordsXmlTag") + ">" + sent.content + "</" + config.getParam("inputDataWordsXmlTag") + ">"); | 163 | w.write("<" + config.getParam("inputDataWordsXmlTag") + ">" + sent.content + "</" + config.getParam("inputDataWordsXmlTag") + ">"); |
164 | w.write("</" + config.getParam("inputDataSentenceXmlTag") + ">\n"); | 164 | w.write("</" + config.getParam("inputDataSentenceXmlTag") + ">\n"); |
165 | if (i == next) | 165 | if (i == next) |
166 | { | 166 | { |
167 | if(count<boundaries.length-1) | 167 | if(count<boundaries.length-1) |
168 | { | 168 | { |
169 | count ++; | 169 | count ++; |
170 | next = boundaries[count]; | 170 | next = boundaries[count]; |
171 | } | 171 | } |
172 | w.write("</seg>\n<seg>\n"); | 172 | w.write("</seg>\n<seg>\n"); |
173 | 173 | ||
174 | } | 174 | } |
175 | } | 175 | } |
176 | w.write ("</seg>\n</Segmentation>"); | 176 | w.write ("</seg>\n</Segmentation>"); |
177 | return w.toString(); | 177 | return w.toString(); |
178 | } | 178 | } |
179 | 179 | ||
180 | /** | 180 | /** |
181 | * Cette fonction permet d'Žditer le rŽsultat de la segmentation au format utilisŽ dans les expŽriences de F. Choi, ainsi que dans les premires versions des outils d'Žvaluation livrŽs (Segmele et Segeval) | 181 | * Cette fonction permet d'éditer le résultat de la segmentation au format utilisé dans les expériences de F. Choi, ainsi que dans les premières versions des outils d'évaluation livrés (Segmele et Segeval) |
182 | * @param bounds : il s'agit de l'objet contenant le calcul des frontires thŽmatiques | 182 | * @param bounds : il s'agit de l'objet contenant le calcul des frontières thématiques |
183 | * @return : La fonction renvoie un objet de type String, qui peut ensuite tre affichŽ ˆ l'Žcran ou bien redirigŽ vers un fichier de sortie. | 183 | * @return : La fonction renvoie un objet de type String, qui peut ensuite être affiché à l'écran ou bien redirigé vers un fichier de sortie. |
184 | */ | 184 | */ |
185 | public String result_lines(Boundaries bounds){ | 185 | public String result_lines(Boundaries bounds){ |
186 | int[] boundaries = bounds.position_boundaries().clone(); | 186 | int[] boundaries = bounds.position_boundaries().clone(); |
187 | Arrays.sort(boundaries); | 187 | Arrays.sort(boundaries); |
188 | int count = 0; | 188 | int count = 0; |
189 | int next = boundaries[0]; | 189 | int next = boundaries[0]; |
190 | 190 | ||
191 | java.io.StringWriter w = new java.io.StringWriter(); | 191 | java.io.StringWriter w = new java.io.StringWriter(); |
192 | w.write ("==========\n"); | 192 | w.write ("==========\n"); |
193 | for (int i=0; i<sentenceCount(); i++){ | 193 | for (int i=0; i<sentenceCount(); i++){ |
194 | 194 | ||
195 | Sentence sent = _sentenceList[i]; | 195 | Sentence sent = _sentenceList[i]; |
196 | w.write( sent.content + "\n"); | 196 | w.write( sent.content + "\n"); |
197 | if (i == next){ | 197 | if (i == next){ |
198 | if (count<boundaries.length-1){ | 198 | if (count<boundaries.length-1){ |
199 | count ++; | 199 | count ++; |
200 | next = boundaries[count]; | 200 | next = boundaries[count]; |
201 | } | 201 | } |
202 | w.write("==========\n"); | 202 | w.write("==========\n"); |
203 | } | 203 | } |
204 | 204 | ||
205 | } | 205 | } |
206 | w.write ("==========\n"); | 206 | w.write ("==========\n"); |
207 | return w.toString(); | 207 | return w.toString(); |
208 | } | 208 | } |
209 | 209 | ||
210 | 210 | ||
211 | //-------------------------------------------------------------------------- | 211 | //-------------------------------------------------------------------------- |
212 | public Sentence sentence(int i) | 212 | public Sentence sentence(int i) |
213 | { | 213 | { |
214 | return _sentenceList[i]; | 214 | return _sentenceList[i]; |
215 | } | 215 | } |
216 | //-------------------------------------------------------------------------- | 216 | //-------------------------------------------------------------------------- |
217 | public int sentenceCount() | 217 | public int sentenceCount() |
218 | { | 218 | { |
219 | return _sentenceList.length; | 219 | return _sentenceList.length; |
220 | } | 220 | } |
221 | } | 221 | } |
222 | 222 | ||
223 | /* | 223 | /* |
224 | InputData in | 224 | InputData in |
225 | for (int i=0; i<in.sentenceCount(); i++) | 225 | for (int i=0; i<in.sentenceCount(); i++) |
226 | { | 226 | { |
227 | Sentence sent = in.sentence(i); | 227 | Sentence sent = in.sentence(i); |
228 | sent.content; | 228 | sent.content; |
229 | for (int j=0; j<sent.lemmaCount(); j++) | 229 | for (int j=0; j<sent.lemmaCount(); j++) |
230 | { | 230 | { |
231 | Sentence.Lemma l = sent.lemmaObject(j); | 231 | Sentence.Lemma l = sent.lemmaObject(j); |
232 | l.code | 232 | l.code |
233 | l.weight | 233 | l.weight |
234 | } | 234 | } |
235 | } | 235 | } |
236 | 236 | ||
237 | 237 | ||
238 | 238 | ||
239 | */ | 239 | */ |
240 | 240 | ||
241 | 241 | ||
242 | 242 | ||
243 | 243 | ||
244 | 244 |
tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/DefaultLexicalChainList.java
1 | package LIA_topic_seg; | 1 | package LIA_topic_seg; |
2 | 2 | ||
3 | import java.util.*; | 3 | import java.util.*; |
4 | 4 | ||
5 | /** | 5 | /** |
6 | * Cette classe prend en charge le calcul des liens lexicaux du texte chargŽ dans un objet de type DefaultInputData | 6 | * Cette classe prend en charge le calcul des liens lexicaux du texte chargé dans un objet de type DefaultInputData |
7 | * Les paramtres de calcul sont intŽgrŽs dans la configuration. Ils concernent le type de hiatus utilisŽ, et le | 7 | * Les paramètres de calcul sont intégrés dans la configuration. Ils concernent le type de hiatus utilisé, et le |
8 | * type de reprŽsentation du texte. | 8 | * type de représentation du texte. |
9 | * l'accs aux ŽlŽments dŽcisif du texte se fait pour chaque lemme par un tableau qui indique ˆ chaque phrase si il est | 9 | * l'accès aux éléments décisif du texte se fait pour chaque lemme par un tableau qui indique à chaque phrase si il est |
10 | * prŽsent ou non, et le poids (ou la prŽsence) d'un lien lexical. | 10 | * présent ou non, et le poids (ou la présence) d'un lien lexical. |
11 | */ | 11 | */ |
12 | public class DefaultLexicalChainList implements LexicalChainList | 12 | public class DefaultLexicalChainList implements LexicalChainList |
13 | { | 13 | { |
14 | int sentenceCount; | 14 | int sentenceCount; |
15 | LemmaDict dict; | 15 | LemmaDict dict; |
16 | DefaultConfig config; | 16 | DefaultConfig config; |
17 | DefaultInputData input; | 17 | DefaultInputData input; |
18 | 18 | ||
19 | private static final int NO_HIATUS = 100; | 19 | private static final int NO_HIATUS = 100; |
20 | private static final int ADAPTIVE_HIATUS = 101; | 20 | private static final int ADAPTIVE_HIATUS = 101; |
21 | private static final int FIXED_HIATUS = 102; | 21 | private static final int FIXED_HIATUS = 102; |
22 | private int _hiatus; | 22 | private int _hiatus; |
23 | private int _hiatusValue; | 23 | private int _hiatusValue; |
24 | private boolean _useWeight; | 24 | private boolean _useWeight; |
25 | private boolean _computeChains; | 25 | private boolean _computeChains; |
26 | private ArrayList<Lemma> _lemmaList = new ArrayList<Lemma>(); | 26 | private ArrayList<Lemma> _lemmaList = new ArrayList<Lemma>(); |
27 | //-------------------------------------------------------------------------- | 27 | //-------------------------------------------------------------------------- |
28 | /** | 28 | /** |
29 | * Un Lemma est indique la rŽpartition d'un lemme dans le texte, ainsi que la rŽpartition et les | 29 | * Un Lemma est indique la répartition d'un lemme dans le texte, ainsi que la répartition et les |
30 | * Žventuelles pondŽration de ses liens lexicaux. | 30 | * éventuelles pondération de ses liens lexicaux. |
31 | * C'est cette classe qui se charge en rŽalitŽ du calcul des liens lexicaux. | 31 | * C'est cette classe qui se charge en réalité du calcul des liens lexicaux. |
32 | */ | 32 | */ |
33 | private class Lemma | 33 | private class Lemma |
34 | { | 34 | { |
35 | private LemmaDict.Lemma _ll; | 35 | private LemmaDict.Lemma _ll; |
36 | boolean[] presenceInSentenceVect; // = new boolean[sentenceCount]; | 36 | boolean[] presenceInSentenceVect; // = new boolean[sentenceCount]; |
37 | float[] weightInSentenceVect; // = new float[sentenceCount]; | 37 | float[] weightInSentenceVect; // = new float[sentenceCount]; |
38 | //------------------------------------------------------------------------ | 38 | //------------------------------------------------------------------------ |
39 | Lemma(LemmaDict.Lemma ll) | 39 | Lemma(LemmaDict.Lemma ll) |
40 | { | 40 | { |
41 | _ll = ll; | 41 | _ll = ll; |
42 | presenceInSentenceVect = new boolean[sentenceCount]; | 42 | presenceInSentenceVect = new boolean[sentenceCount]; |
43 | weightInSentenceVect = new float[sentenceCount]; | 43 | weightInSentenceVect = new float[sentenceCount]; |
44 | Arrays.fill(presenceInSentenceVect, false); | 44 | Arrays.fill(presenceInSentenceVect, false); |
45 | Arrays.fill(weightInSentenceVect, 0.0f); | 45 | Arrays.fill(weightInSentenceVect, 0.0f); |
46 | if (_hiatus == ADAPTIVE_HIATUS) | 46 | if (_hiatus == ADAPTIVE_HIATUS) |
47 | _hiatusValue = ll.localHiatus(); | 47 | _hiatusValue = ll.localHiatus(); |
48 | int previousSentenceIdx = -1; | 48 | int previousSentenceIdx = -1; |
49 | int sentenceIdx = 0; | 49 | int sentenceIdx = 0; |
50 | int chainLength = 1; | 50 | int chainLength = 1; |
51 | int lemmasInChainCount = 0; | 51 | int lemmasInChainCount = 0; |
52 | int lemmaSentenceCount = ll.sentenceCount(); | 52 | int lemmaSentenceCount = ll.sentenceCount(); |
53 | 53 | ||
54 | for (int i=0; i<lemmaSentenceCount; i++) | 54 | for (int i=0; i<lemmaSentenceCount; i++) |
55 | { | 55 | { |
56 | sentenceIdx = ll.sentenceIdx(i); | 56 | sentenceIdx = ll.sentenceIdx(i); |
57 | presenceInSentenceVect[sentenceIdx] = true; | 57 | presenceInSentenceVect[sentenceIdx] = true; |
58 | if (_computeChains) | 58 | if (_computeChains) |
59 | { | 59 | { |
60 | if (previousSentenceIdx == -1) | 60 | if (previousSentenceIdx == -1) |
61 | previousSentenceIdx = sentenceIdx; | 61 | previousSentenceIdx = sentenceIdx; |
62 | if (_hiatus == NO_HIATUS || | 62 | if (_hiatus == NO_HIATUS || |
63 | sentenceIdx-previousSentenceIdx <= _hiatusValue) | 63 | sentenceIdx-previousSentenceIdx <= _hiatusValue) |
64 | { | 64 | { |
65 | chainLength += sentenceIdx-previousSentenceIdx; | 65 | chainLength += sentenceIdx-previousSentenceIdx; |
66 | lemmasInChainCount++; | 66 | lemmasInChainCount++; |
67 | } | 67 | } |
68 | else | 68 | else |
69 | { | 69 | { |
70 | setWeight(previousSentenceIdx, chainLength, lemmasInChainCount); | 70 | setWeight(previousSentenceIdx, chainLength, lemmasInChainCount); |
71 | chainLength = 1; | 71 | chainLength = 1; |
72 | lemmasInChainCount = 1; | 72 | lemmasInChainCount = 1; |
73 | } | 73 | } |
74 | previousSentenceIdx = sentenceIdx; | 74 | previousSentenceIdx = sentenceIdx; |
75 | } | 75 | } |
76 | } | 76 | } |
77 | if (_computeChains) | 77 | if (_computeChains) |
78 | setWeight(previousSentenceIdx, chainLength, lemmasInChainCount); | 78 | setWeight(previousSentenceIdx, chainLength, lemmasInChainCount); |
79 | } | 79 | } |
80 | //------------------------------------------------------------------------ | 80 | //------------------------------------------------------------------------ |
81 | /** | 81 | /** |
82 | * Cette fonction permet de pondŽrer un lien lexical en fonction de la densitŽ des occurrences | 82 | * Cette fonction permet de pondérer un lien lexical en fonction de la densité des occurrences |
83 | * du lemme, et du poids du lemme. | 83 | * du lemme, et du poids du lemme. |
84 | * @param lastSentenceIdx : numŽro de la phrase dans laquelle apparait la dernire occurrence | 84 | * @param lastSentenceIdx : numéro de la phrase dans laquelle apparait la dernière occurrence |
85 | * @param chainLength : longueur totale du lien lexical | 85 | * @param chainLength : longueur totale du lien lexical |
86 | * @param lemmasInChainCount : nombre d'occurrences du lemme dans le llien lexical | 86 | * @param lemmasInChainCount : nombre d'occurrences du lemme dans le llien lexical |
87 | */ | 87 | */ |
88 | void setWeight(int lastSentenceIdx, int chainLength, int lemmasInChainCount) | 88 | void setWeight(int lastSentenceIdx, int chainLength, int lemmasInChainCount) |
89 | { | 89 | { |
90 | if (chainLength > 1) | 90 | if (chainLength > 1) |
91 | { | 91 | { |
92 | float w = 1.0f; | 92 | float w = 1.0f; |
93 | if (_useWeight) | 93 | if (_useWeight) |
94 | w = _ll.maxWeight * lemmasInChainCount | 94 | w = _ll.maxWeight * lemmasInChainCount |
95 | * (float)Math.log((float)sentenceCount/(float)chainLength); | 95 | * (float)Math.log((float)sentenceCount/(float)chainLength); |
96 | for (int j=0; j<chainLength; j++) | 96 | for (int j=0; j<chainLength; j++) |
97 | weightInSentenceVect[lastSentenceIdx-j] = w; | 97 | weightInSentenceVect[lastSentenceIdx-j] = w; |
98 | } | 98 | } |
99 | } | 99 | } |
100 | } | 100 | } |
101 | //-------------------------------------------------------------------------- | 101 | //-------------------------------------------------------------------------- |
102 | public DefaultLexicalChainList(DefaultInputData in) | 102 | public DefaultLexicalChainList(DefaultInputData in) |
103 | { | 103 | { |
104 | input = in; | 104 | input = in; |
105 | dict = in.lemmaDict; | 105 | dict = in.lemmaDict; |
106 | config = in.config; | 106 | config = in.config; |
107 | String s = config.getParam("computeChains"); | 107 | String s = config.getParam("computeChains"); |
108 | _useWeight = (s.equals("weight")); | 108 | _useWeight = (s.equals("weight")); |
109 | _computeChains = (s.equals("yes") || s.equals("weight")); | 109 | _computeChains = (s.equals("yes") || s.equals("weight")); |
110 | String chains = config.getParam("lexicalChainsHiatus"); | 110 | String chains = config.getParam("lexicalChainsHiatus"); |
111 | if (chains.equals("")) | 111 | if (chains.equals("")) |
112 | _hiatus = NO_HIATUS; | 112 | _hiatus = NO_HIATUS; |
113 | else if (chains.equals("ADAPTIVE")) | 113 | else if (chains.equals("ADAPTIVE")) |
114 | _hiatus = ADAPTIVE_HIATUS; | 114 | _hiatus = ADAPTIVE_HIATUS; |
115 | else | 115 | else |
116 | { | 116 | { |
117 | _hiatus = FIXED_HIATUS; | 117 | _hiatus = FIXED_HIATUS; |
118 | _hiatusValue = Integer.parseInt(chains); | 118 | _hiatusValue = Integer.parseInt(chains); |
119 | } | 119 | } |
120 | sentenceCount = input.sentenceCount(); | 120 | sentenceCount = input.sentenceCount(); |
121 | 121 | ||
122 | for (int i=0; i<dict.lemmaCount(); i++) | 122 | for (int i=0; i<dict.lemmaCount(); i++) |
123 | { | 123 | { |
124 | LemmaDict.Lemma ll = dict.lemmaObject(i); | 124 | LemmaDict.Lemma ll = dict.lemmaObject(i); |
125 | // si le lemme est unique dans l'ensemble des phrases, on ne le garde pas | 125 | // si le lemme est unique dans l'ensemble des phrases, on ne le garde pas |
126 | if (_computeChains && ll.occurences < 2) | 126 | if (_computeChains && ll.occurences < 2) |
127 | continue; | 127 | continue; |
128 | Lemma lemma = new Lemma(ll); | 128 | Lemma lemma = new Lemma(ll); |
129 | if (true) // test à quelles conditions on ajoute le lemme | 129 | if (true) // test ‡ quelles conditions on ajoute le lemme |
130 | _lemmaList.add(lemma); | 130 | _lemmaList.add(lemma); |
131 | } | 131 | } |
132 | } | 132 | } |
133 | //-------------------------------------------------------------------------- | 133 | //-------------------------------------------------------------------------- |
134 | /** | 134 | /** |
135 | * Cette fonction renvoie le code d'un lemme ayant un index donnŽ | 135 | * Cette fonction renvoie le code d'un lemme ayant un index donné |
136 | * @param lemmaIdx : index du lemme | 136 | * @param lemmaIdx : index du lemme |
137 | * @return : le code du lemme | 137 | * @return : le code du lemme |
138 | */ | 138 | */ |
139 | public int lemmaCode(int lemmaIdx) | 139 | public int lemmaCode(int lemmaIdx) |
140 | { | 140 | { |
141 | return _lemmaList.get(lemmaIdx)._ll.code; | 141 | return _lemmaList.get(lemmaIdx)._ll.code; |
142 | } | 142 | } |
143 | //-------------------------------------------------------------------------- | 143 | //-------------------------------------------------------------------------- |
144 | /** | 144 | /** |
145 | * Cette fonction renvoie le nombre total de lemmes ayant un lien lexical | 145 | * Cette fonction renvoie le nombre total de lemmes ayant un lien lexical |
146 | * @return : un nombre de lemmes | 146 | * @return : un nombre de lemmes |
147 | */ | 147 | */ |
148 | public int lemmaCount() | 148 | public int lemmaCount() |
149 | { | 149 | { |
150 | return _lemmaList.size(); | 150 | return _lemmaList.size(); |
151 | } | 151 | } |
152 | //-------------------------------------------------------------------------- | 152 | //-------------------------------------------------------------------------- |
153 | /** | 153 | /** |
154 | * Cette fonction indique si un lemme donnŽ est prŽsent dans le texte initial dans une phrase donnŽe | 154 | * Cette fonction indique si un lemme donné est présent dans le texte initial dans une phrase donnée |
155 | * @param lemmaIdx : index du lemme ˆ tester | 155 | * @param lemmaIdx : index du lemme à tester |
156 | * @param sentenceIdx : numŽro de la phrase | 156 | * @param sentenceIdx : numéro de la phrase |
157 | * @return true si le lemme est prŽsent dans la phrase | 157 | * @return true si le lemme est présent dans la phrase |
158 | * false sinon | 158 | * false sinon |
159 | * | 159 | * |
160 | */ | 160 | */ |
161 | public boolean presence(int lemmaIdx, int sentenceIdx) | 161 | public boolean presence(int lemmaIdx, int sentenceIdx) |
162 | { | 162 | { |
163 | return _lemmaList.get(lemmaIdx).presenceInSentenceVect[sentenceIdx]; | 163 | return _lemmaList.get(lemmaIdx).presenceInSentenceVect[sentenceIdx]; |
164 | } | 164 | } |
165 | //-------------------------------------------------------------------------- | 165 | //-------------------------------------------------------------------------- |
166 | /** | 166 | /** |
167 | * Cette fonction permet d'accŽder au poids du lien lexical d'un lemme dans une phrase | 167 | * Cette fonction permet d'accéder au poids du lien lexical d'un lemme dans une phrase |
168 | * @param lemmaIdx : index du lemme | 168 | * @param lemmaIdx : index du lemme |
169 | * @param sentenceIdx : numŽro de la phrase | 169 | * @param sentenceIdx : numéro de la phrase |
170 | * @return : valeur du lien lexical du lemme dans la phrase si il y a un lien actif, 0 sinon | 170 | * @return : valeur du lien lexical du lemme dans la phrase si il y a un lien actif, 0 sinon |
171 | */ | 171 | */ |
172 | public float weight(int lemmaIdx, int sentenceIdx) | 172 | public float weight(int lemmaIdx, int sentenceIdx) |
173 | { | 173 | { |
174 | return _lemmaList.get(lemmaIdx).weightInSentenceVect[sentenceIdx]; | 174 | return _lemmaList.get(lemmaIdx).weightInSentenceVect[sentenceIdx]; |
175 | } | 175 | } |
176 | //-------------------------------------------------------------------------- | 176 | //-------------------------------------------------------------------------- |
177 | /** | 177 | /** |
178 | * Cette fonction permet d'appeller toString (false, false), une version par dŽfaut de l'affichage. | 178 | * Cette fonction permet d'appeller toString (false, false), une version par défaut de l'affichage. |
179 | */ | 179 | */ |
180 | public String toString() | 180 | public String toString() |
181 | { | 181 | { |
182 | return toString(false, false); | 182 | return toString(false, false); |
183 | } | 183 | } |
184 | //-------------------------------------------------------------------------- | 184 | //-------------------------------------------------------------------------- |
185 | /** | 185 | /** |
186 | * Cette fonction permet de tester et d'afficher les liens lexicaux calculŽs | 186 | * Cette fonction permet de tester et d'afficher les liens lexicaux calculés |
187 | * @param displayWeightZero : true pour affichier les poids mme quand les liens sont absents | 187 | * @param displayWeightZero : true pour affichier les poids même quand les liens sont absents |
188 | * @param displaySentenceContent : truc pour afficher le texte initial | 188 | * @param displaySentenceContent : truc pour afficher le texte initial |
189 | * | 189 | * |
190 | */ | 190 | */ |
191 | public String toString(boolean displayWeightZero, | 191 | public String toString(boolean displayWeightZero, |
192 | boolean displaySentenceContent) | 192 | boolean displaySentenceContent) |
193 | { | 193 | { |
194 | java.io.StringWriter w = new java.io.StringWriter(); | 194 | java.io.StringWriter w = new java.io.StringWriter(); |
195 | w.write(super.toString()+"\n"); | 195 | w.write(super.toString()+"\n"); |
196 | for (int i=0; i<_lemmaList.size(); i++) | 196 | for (int i=0; i<_lemmaList.size(); i++) |
197 | { | 197 | { |
198 | w.write("LEMMA #"+i | 198 | w.write("LEMMA #"+i |
199 | +" code("+lemmaCode(i)+")" | 199 | +" code("+lemmaCode(i)+")" |
200 | +" content("+dict.lemmaObject(lemmaCode(i)).content+")" | 200 | +" content("+dict.lemmaObject(lemmaCode(i)).content+")" |
201 | +"\n"); | 201 | +"\n"); |
202 | for (int sent=0; sent<sentenceCount; sent++) | 202 | for (int sent=0; sent<sentenceCount; sent++) |
203 | if (weight(i, sent) != 0.0f || displayWeightZero) | 203 | if (weight(i, sent) != 0.0f || displayWeightZero) |
204 | { | 204 | { |
205 | w.write(" SENTENCE #"+sent | 205 | w.write(" SENTENCE #"+sent |
206 | +" presence("+presence(i,sent)+")" | 206 | +" presence("+presence(i,sent)+")" |
207 | +" weight("+weight(i, sent)+")"); | 207 | +" weight("+weight(i, sent)+")"); |
208 | if (displaySentenceContent) | 208 | if (displaySentenceContent) |
209 | w.write(" content("+input.sentence(sent).content+")"); | 209 | w.write(" content("+input.sentence(sent).content+")"); |
210 | w.write("\n"); | 210 | w.write("\n"); |
211 | } | 211 | } |
212 | } | 212 | } |
213 | return w.toString(); | 213 | return w.toString(); |
214 | } | 214 | } |
215 | } | 215 | } |
216 | 216 |
tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/GapsScores.java
1 | package LIA_topic_seg; | 1 | package LIA_topic_seg; |
2 | /** | 2 | /** |
3 | * Cette interface est dŽdiŽe au calcul de probabilitŽ de ruptures entre phrases ou sŽquences de mots. | 3 | * Cette interface est dédiée au calcul de probabilité de ruptures entre phrases ou séquences de mots. |
4 | * elle se fonde sur le rŽsultat de LexicalChainList, qui fournit les lemmes importants de chaque phrase, | 4 | * elle se fonde sur le résultat de LexicalChainList, qui fournit les lemmes importants de chaque phrase, |
5 | * qu'ils constituent un lien lexical ou qu'ils soient juste prŽsents. | 5 | * qu'ils constituent un lien lexical ou qu'ils soient juste présents. |
6 | * | 6 | * |
7 | * | 7 | * |
8 | */ | 8 | */ |
9 | public interface GapsScores { | 9 | public interface GapsScores { |
10 | /** | 10 | /** |
11 | * La fonction renvoie un tableau des valeurs calculŽes pour tous les intervalles entre 2 unitŽs de traitement | 11 | * La fonction renvoie un tableau des valeurs calculées pour tous les intervalles entre 2 unités de traitement |
12 | * Il peut s'agir de valeurs ˆ maximiser ou ˆ minimiser. | 12 | * Il peut s'agir de valeurs à maximiser ou à minimiser. |
13 | * @return un tableau de valeurs | 13 | * @return un tableau de valeurs |
14 | */ | 14 | */ |
15 | public float[] values(); | 15 | public float[] values(); |
16 | /** | 16 | /** |
17 | * retourne le score de l'intervalle entre la phrase bound et la phrase bound+1 | 17 | * retourne le score de l'intervalle entre la phrase bound et la phrase bound+1 |
18 | * @param bound : numŽro de la phrase prŽcŽdent l'intervalle | 18 | * @param bound : numéro de la phrase précédent l'intervalle |
19 | * @return : un score | 19 | * @return : un score |
20 | */ | 20 | */ |
21 | public float bound_value(int bound); | 21 | public float bound_value(int bound); |
22 | /** | 22 | /** |
23 | * propose une sortie texte des valeurs calculŽes. le format est pour chaque intervalle une ligne : | 23 | * propose une sortie texte des valeurs calculées. le format est pour chaque intervalle une ligne : |
24 | * GAP X-X+1 : valeur | 24 | * GAP X-X+1 : valeur |
25 | * @return : une chaine de caractres | 25 | * @return : une chaine de caractères |
26 | */ | 26 | */ |
27 | public String to_string(); | 27 | public String to_string(); |
28 | 28 | ||
29 | } | 29 | } |
30 | 30 |
tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/LemmaDict.java
1 | package LIA_topic_seg; | 1 | package LIA_topic_seg; |
2 | 2 | ||
3 | import java.util.*; | 3 | import java.util.*; |
4 | 4 | ||
5 | /** | 5 | /** |
6 | * Cette classe reprŽsente le contenu d'un dictionnaire de lemmes, chaque lemme Žtant dŽfini par un | 6 | * Cette classe représente le contenu d'un dictionnaire de lemmes, chaque lemme étant défini par un |
7 | * code (numŽro d'index), son contenu textuel, le poids maximal qui lui est attribuŽ dans le texte, | 7 | * code (numéro d'index), son contenu textuel, le poids maximal qui lui est attribué dans le texte, |
8 | * le nombre de fois o il apparait dans le texte, et la liste des phrases dans lesquelles il apparait. | 8 | * le nombre de fois où il apparait dans le texte, et la liste des phrases dans lesquelles il apparait. |
9 | * | 9 | * |
10 | */ | 10 | */ |
11 | class LemmaDict | 11 | class LemmaDict |
12 | { | 12 | { |
13 | //-------------------------------------------------------------------------- | 13 | //-------------------------------------------------------------------------- |
14 | class Lemma | 14 | class Lemma |
15 | { | 15 | { |
16 | int code; | 16 | int code; |
17 | String content; | 17 | String content; |
18 | float maxWeight; | 18 | float maxWeight; |
19 | int occurences = 1; | 19 | int occurences = 1; |
20 | private ArrayList<Integer> sentenceIdxList = new ArrayList<Integer>(); | 20 | private ArrayList<Integer> sentenceIdxList = new ArrayList<Integer>(); |
21 | 21 | ||
22 | private Lemma(int c, float w, String s, int i) | 22 | private Lemma(int c, float w, String s, int i) |
23 | { | 23 | { |
24 | code = c; | 24 | code = c; |
25 | maxWeight = w; | 25 | maxWeight = w; |
26 | content = s; | 26 | content = s; |
27 | sentenceIdxList.add(i); | 27 | sentenceIdxList.add(i); |
28 | } | 28 | } |
29 | int sentenceCount() | 29 | int sentenceCount() |
30 | { | 30 | { |
31 | return sentenceIdxList.size(); | 31 | return sentenceIdxList.size(); |
32 | } | 32 | } |
33 | int sentenceIdx(int i) | 33 | int sentenceIdx(int i) |
34 | { | 34 | { |
35 | return sentenceIdxList.get(i); | 35 | return sentenceIdxList.get(i); |
36 | } | 36 | } |
37 | int localHiatus() | 37 | int localHiatus() |
38 | { | 38 | { |
39 | int size = sentenceIdxList.size(); | 39 | int size = sentenceIdxList.size(); |
40 | return (sentenceIdxList.get(size-1) - sentenceIdxList.get(0)) / size + 1; | 40 | return (sentenceIdxList.get(size-1) - sentenceIdxList.get(0)) / size + 1; |
41 | } | 41 | } |
42 | } | 42 | } |
43 | private ArrayList<Lemma> _array = new ArrayList<Lemma>(); | 43 | private ArrayList<Lemma> _array = new ArrayList<Lemma>(); |
44 | private Hashtable<String, Integer> _table = new Hashtable<String,Integer>(); | 44 | private Hashtable<String, Integer> _table = new Hashtable<String,Integer>(); |
45 | //-------------------------------------------------------------------------- | 45 | //-------------------------------------------------------------------------- |
46 | int lemmaCode(String content) | 46 | int lemmaCode(String content) |
47 | { | 47 | { |
48 | return _table.get(content); | 48 | return _table.get(content); |
49 | } | 49 | } |
50 | //-------------------------------------------------------------------------- | 50 | //-------------------------------------------------------------------------- |
51 | Lemma lemmaObject(int lemmaCode) | 51 | Lemma lemmaObject(int lemmaCode) |
52 | { | 52 | { |
53 | return _array.get(lemmaCode); | 53 | return _array.get(lemmaCode); |
54 | } | 54 | } |
55 | //-------------------------------------------------------------------------- | 55 | //-------------------------------------------------------------------------- |
56 | int lemmaCount() | 56 | int lemmaCount() |
57 | { | 57 | { |
58 | return _array.size(); | 58 | return _array.size(); |
59 | } | 59 | } |
60 | //-------------------------------------------------------------------------- | 60 | //-------------------------------------------------------------------------- |
61 | int add(String content, float weight, int sentenceIdx) | 61 | int add(String content, float weight, int sentenceIdx) |
62 | { | 62 | { |
63 | Lemma l; | 63 | Lemma l; |
64 | Integer i = _table.get(content); | 64 | Integer i = _table.get(content); |
65 | if (i == null) | 65 | if (i == null) |
66 | { | 66 | { |
67 | int code = _array.size(); | 67 | int code = _array.size(); |
68 | String s = new String(content); | 68 | String s = new String(content); |
69 | _table.put(s, code); | 69 | _table.put(s, code); |
70 | _array.add(new Lemma(code, weight, s, sentenceIdx)); | 70 | _array.add(new Lemma(code, weight, s, sentenceIdx)); |
71 | return code; | 71 | return code; |
72 | } | 72 | } |
73 | l = _array.get(i); | 73 | l = _array.get(i); |
74 | l.maxWeight = Math.max(weight, l.maxWeight); | 74 | l.maxWeight = Math.max(weight, l.maxWeight); |
75 | l.occurences++; | 75 | l.occurences++; |
76 | l.sentenceIdxList.add(sentenceIdx); | 76 | l.sentenceIdxList.add(sentenceIdx); |
77 | return i; | 77 | return i; |
78 | } | 78 | } |
79 | //-------------------------------------------------------------------------- | 79 | //-------------------------------------------------------------------------- |
80 | public String toString() | 80 | public String toString() |
81 | { | 81 | { |
82 | java.io.StringWriter w = new java.io.StringWriter(); | 82 | java.io.StringWriter w = new java.io.StringWriter(); |
83 | w.write(super.toString()+"\n"); | 83 | w.write(super.toString()+"\n"); |
84 | for (int i=0; i<lemmaCount(); i++) | 84 | for (int i=0; i<lemmaCount(); i++) |
85 | { | 85 | { |
86 | Lemma l = lemmaObject(i); | 86 | Lemma l = lemmaObject(i); |
87 | w.write("LEMMA" | 87 | w.write("LEMMA" |
88 | +" code("+l.code /*= i*/+")" | 88 | +" code("+l.code /*= i*/+")" |
89 | +" content("+l.content+")" | 89 | +" content("+l.content+")" |
90 | +" maxWeight("+l.maxWeight+")" | 90 | +" maxWeight("+l.maxWeight+")" |
91 | +" occurences("+l.occurences+")" | 91 | +" occurences("+l.occurences+")" |
92 | +" localHiatus("+l.localHiatus()+")" | 92 | +" localHiatus("+l.localHiatus()+")" |
93 | +" sentences#("); | 93 | +" sentences#("); |
94 | for (int j=0; j<l.sentenceCount(); j++) | 94 | for (int j=0; j<l.sentenceCount(); j++) |
95 | { | 95 | { |
96 | if (j!=0) | 96 | if (j!=0) |
97 | w.write(","); | 97 | w.write(","); |
98 | w.write(""+l.sentenceIdx(j)); // "" mandatory to avoid bug | 98 | w.write(""+l.sentenceIdx(j)); // "" mandatory to avoid bug |
99 | } | 99 | } |
100 | w.write(")\n"); | 100 | w.write(")\n"); |
101 | } | 101 | } |
102 | return w.toString(); | 102 | return w.toString(); |
103 | } | 103 | } |
104 | //-------------------------------------------------------------------------- | 104 | //-------------------------------------------------------------------------- |
105 | } | 105 | } |
tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/LexicalChainList.java
1 | package LIA_topic_seg; | 1 | package LIA_topic_seg; |
2 | 2 | ||
3 | /** | 3 | /** |
4 | * Cette classe gre le calcul des liens lexicaux, et plus gŽnŽralement de la reprŽsentation du texte, | 4 | * Cette classe gère le calcul des liens lexicaux, et plus généralement de la représentation du texte, |
5 | * en se basant sur des valeurs associŽes ˆ chaque lemme du dictionnaire des lemmes sur l'ensemble des phrases | 5 | * en se basant sur des valeurs associées à chaque lemme du dictionnaire des lemmes sur l'ensemble des phrases |
6 | * du texte analysŽ. Un lemme peut tre reprŽsentŽ par n'importe quelle cha”ne de caractres. | 6 | * du texte analysé. Un lemme peut être représenté par n'importe quelle chaîne de caractères. |
7 | * | 7 | * |
8 | */ | 8 | */ |
9 | public interface LexicalChainList { | 9 | public interface LexicalChainList { |
10 | /** | 10 | /** |
11 | * | 11 | * |
12 | * @param lemmaIdx : numŽro d'index du lemme | 12 | * @param lemmaIdx : numéro d'index du lemme |
13 | * @return le code du lemme | 13 | * @return le code du lemme |
14 | */ | 14 | */ |
15 | int lemmaCode(int lemmaIdx); | 15 | int lemmaCode(int lemmaIdx); |
16 | 16 | ||
17 | /** | 17 | /** |
18 | * | 18 | * |
19 | * @return le nombre de lemmes recensŽs dans la reprŽsentation du texte. | 19 | * @return le nombre de lemmes recensés dans la représentation du texte. |
20 | */ | 20 | */ |
21 | int lemmaCount(); | 21 | int lemmaCount(); |
22 | 22 | ||
23 | /** | 23 | /** |
24 | * | 24 | * |
25 | * @param lemmaIdx : numŽro d'index du lemme | 25 | * @param lemmaIdx : numéro d'index du lemme |
26 | * @param sentenceIdx : numŽro de la phrase (ou unitŽ de traitement) | 26 | * @param sentenceIdx : numéro de la phrase (ou unité de traitement) |
27 | * @return : true si le lemme ou est reprŽsentŽ dans la phrase. | 27 | * @return : true si le lemme ou est représenté dans la phrase. |
28 | */ | 28 | */ |
29 | boolean presence(int lemmaIdx, int sentenceIdx); | 29 | boolean presence(int lemmaIdx, int sentenceIdx); |
30 | 30 | ||
31 | /** | 31 | /** |
32 | * | 32 | * |
33 | * @param lemmaIdx : numŽro d'index du lemme | 33 | * @param lemmaIdx : numéro d'index du lemme |
34 | * @param sentenceIdx : numŽro de la phrase (ou unitŽ de traitement) | 34 | * @param sentenceIdx : numéro de la phrase (ou unité de traitement) |
35 | * @return : le poids du lemme dans la phrase, qui peut tre par exemple un nombre d'occurrences ou le poids d'un llien lexical, ou encore un score d'affinitŽs lexicales. | 35 | * @return : le poids du lemme dans la phrase, qui peut être par exemple un nombre d'occurrences ou le poids d'un llien lexical, ou encore un score d'affinités lexicales. |
36 | */ | 36 | */ |
37 | float weight(int lemmaIdx, int sentenceIdx); | 37 | float weight(int lemmaIdx, int sentenceIdx); |
38 | 38 | ||
39 | /** | 39 | /** |
40 | * Cette fonction doit permettre un affichage ˆ l'Žcran ou une sortie fichier pour pouvoir suivre le fonctionnement du programme | 40 | * Cette fonction doit permettre un affichage à l'écran ou une sortie fichier pour pouvoir suivre le fonctionnement du programme |
41 | * @return : une cha”ne de caractres contenant par exemple pour chaque phrase les lemmes qui lui sont affectŽs, ou l'inverse... | 41 | * @return : une chaîne de caractères contenant par exemple pour chaque phrase les lemmes qui lui sont affectés, ou l'inverse... |
42 | */ | 42 | */ |
43 | public String toString(); | 43 | public String toString(); |
44 | 44 | ||
45 | } | 45 | } |
46 | 46 |
tools/SIGMUND/LIA_topic_seg/src/LIA_topic_seg/Sentence.java
1 | package LIA_topic_seg; | 1 | package LIA_topic_seg; |
2 | 2 | ||
3 | import java.util.*; | 3 | import java.util.*; |
4 | 4 | ||
5 | /** | 5 | /** |
6 | * Cette classe reprŽsente les informations contenues dans une phrase, c'est ˆ dire un texte brut | 6 | * Cette classe représente les informations contenues dans une phrase, c'est à dire un texte brut |
7 | * et un ensemble de lemmes pondŽrŽs. | 7 | * et un ensemble de lemmes pondérés. |
8 | */ | 8 | */ |
9 | class Sentence | 9 | class Sentence |
10 | { | 10 | { |
11 | //-------------------------------------------------------------------------- | 11 | //-------------------------------------------------------------------------- |
12 | /** | 12 | /** |
13 | * Cette classe permet de conserver les informations sur un lemme, c'est ˆ dire son rang d'accs | 13 | * Cette classe permet de conserver les informations sur un lemme, c'est à dire son rang d'accès |
14 | * dans le dictionnaire des lemmes, et le poids qui lui est attribuŽ dans le fichier d'entrŽe. | 14 | * dans le dictionnaire des lemmes, et le poids qui lui est attribué dans le fichier d'entrée. |
15 | */ | 15 | */ |
16 | class Lemma | 16 | class Lemma |
17 | { | 17 | { |
18 | int code; | 18 | int code; |
19 | float weight; | 19 | float weight; |
20 | 20 | ||
21 | Lemma(int c, float w) | 21 | Lemma(int c, float w) |
22 | { | 22 | { |
23 | code = c; | 23 | code = c; |
24 | weight = w; | 24 | weight = w; |
25 | } | 25 | } |
26 | } | 26 | } |
27 | //-------------------------------------------------------------------------- | 27 | //-------------------------------------------------------------------------- |
28 | String content; | 28 | String content; |
29 | private ArrayList<Lemma> _lemmaList = new ArrayList<Lemma>(); | 29 | private ArrayList<Lemma> _lemmaList = new ArrayList<Lemma>(); |
30 | //private Hashtable<Integer, Integer> _dict | 30 | //private Hashtable<Integer, Integer> _dict |
31 | // = new Hashtable<Integer, Integer>(); // code + occurences | 31 | // = new Hashtable<Integer, Integer>(); // code + occurences |
32 | private int _wordCount; | 32 | private int _wordCount; |
33 | private boolean _wordCountDefined = false; | 33 | private boolean _wordCountDefined = false; |
34 | //-------------------------------------------------------------------------- | 34 | //-------------------------------------------------------------------------- |
35 | 35 | ||
36 | /** | 36 | /** |
37 | * Cette fonction permet de signaler la prŽsence d'un lemme dans une phrase | 37 | * Cette fonction permet de signaler la présence d'un lemme dans une phrase |
38 | * @param code : le code issu du dictionnaire des lemmes | 38 | * @param code : le code issu du dictionnaire des lemmes |
39 | * @param weight : le poids attribuŽ au lemme dans la phrase | 39 | * @param weight : le poids attribué au lemme dans la phrase |
40 | */ void addLemma(int code, float weight) | 40 | */ void addLemma(int code, float weight) |
41 | { | 41 | { |
42 | //int occurences = 1; | 42 | //int occurences = 1; |
43 | //Integer xocc = _dict.get(code); | 43 | //Integer xocc = _dict.get(code); |
44 | //if (xocc != null) | 44 | //if (xocc != null) |
45 | // occurences = xocc.intValue()+1; | 45 | // occurences = xocc.intValue()+1; |
46 | //_dict.put(code, occurences); | 46 | //_dict.put(code, occurences); |
47 | _lemmaList.add(new Lemma(code, weight)); | 47 | _lemmaList.add(new Lemma(code, weight)); |
48 | } | 48 | } |
49 | //-------------------------------------------------------------------------- | 49 | //-------------------------------------------------------------------------- |
50 | /** | 50 | /** |
51 | * Cette fonction permet de calculer de manire basique le nombre de mots du texte brut de la phrase | 51 | * Cette fonction permet de calculer de manière basique le nombre de mots du texte brut de la phrase |
52 | * les sŽparateurs de mots utilisŽs sont les caractres d'espacement. | 52 | * les séparateurs de mots utilisés sont les caractères d'espacement. |
53 | * @return : retourne le nombre de mots de la phrase | 53 | * @return : retourne le nombre de mots de la phrase |
54 | */ | 54 | */ |
55 | int wordCount() | 55 | int wordCount() |
56 | { | 56 | { |
57 | if (!_wordCountDefined) | 57 | if (!_wordCountDefined) |
58 | { | 58 | { |
59 | _wordCount = new StringTokenizer(content, " '\t\n\r\f").countTokens(); | 59 | _wordCount = new StringTokenizer(content, " '\t\n\r\f").countTokens(); |
60 | _wordCountDefined = true; | 60 | _wordCountDefined = true; |
61 | } | 61 | } |
62 | return _wordCount; | 62 | return _wordCount; |
63 | } | 63 | } |
64 | //-------------------------------------------------------------------------- | 64 | //-------------------------------------------------------------------------- |
65 | /** | 65 | /** |
66 | * Cette fonction renvoie le nombre de lemmes associŽs ˆ la phrase | 66 | * Cette fonction renvoie le nombre de lemmes associés à la phrase |
67 | * @return le nombre de lemmes | 67 | * @return le nombre de lemmes |
68 | */ | 68 | */ |
69 | int lemmaCount() | 69 | int lemmaCount() |
70 | { | 70 | { |
71 | return _lemmaList.size(); | 71 | return _lemmaList.size(); |
72 | } | 72 | } |
73 | //-------------------------------------------------------------------------- | 73 | //-------------------------------------------------------------------------- |
74 | /** | 74 | /** |
75 | *Cette fonction permet d'accŽder ˆ un lemme de la phrase en fonction de son rang dans la phrase | 75 | *Cette fonction permet d'accéder à un lemme de la phrase en fonction de son rang dans la phrase |
76 | *@return un objet de type Lemma (dŽfini par un code dans le dictionnaire des lemmes et un poids) | 76 | *@return un objet de type Lemma (défini par un code dans le dictionnaire des lemmes et un poids) |
77 | */ | 77 | */ |
78 | 78 | ||
79 | Lemma lemmaObject(int lemmaIdx) | 79 | Lemma lemmaObject(int lemmaIdx) |
80 | { | 80 | { |
81 | return _lemmaList.get(lemmaIdx); | 81 | return _lemmaList.get(lemmaIdx); |
82 | } | 82 | } |
83 | //-------------------------------------------------------------------------- | 83 | //-------------------------------------------------------------------------- |
84 | //int lemmaOccurences(int lemmaCode) | 84 | //int lemmaOccurences(int lemmaCode) |
85 | //{ | 85 | //{ |
86 | // return _dict.get(lemmaCode); | 86 | // return _dict.get(lemmaCode); |
87 | //} | 87 | //} |
88 | //-------------------------------------------------------------------------- | 88 | //-------------------------------------------------------------------------- |
89 | } | 89 | } |
90 | 90 |
tools/SIGMUND/LIA_topic_seg/src/Test.java
1 | 1 | ||
2 | import LIA_topic_seg.*; | 2 | import LIA_topic_seg.*; |
3 | import java.io.*; | 3 | import java.io.*; |
4 | import java.util.*; | 4 | import java.util.*; |
5 | 5 | ||
6 | /** | 6 | /** |
7 | * Cet exemple recense la plupart des possibilitŽs pour une utilisation minimale de l'application | 7 | * Cet exemple recense la plupart des possibilités pour une utilisation minimale de l'application |
8 | * l'exŽcution directe applique les paramtres par dŽfaut. | 8 | * l'exécution directe applique les paramètres par défaut. |
9 | * | 9 | * |
10 | */ | 10 | */ |
11 | class Test | 11 | class Test |
12 | { | 12 | { |
13 | public static void main(String args[]) | 13 | public static void main(String args[]) |
14 | { | 14 | { |
15 | try | 15 | try |
16 | { | 16 | { |
17 | //crŽation d'une configuration avec les paramtres par dŽfaut | 17 | //création d'une configuration avec les paramètres par défaut |
18 | DefaultConfig c = new DefaultConfig(); | 18 | DefaultConfig c = new DefaultConfig(); |
19 | 19 | ||
20 | // lorsque on veut utiliser un fichier de configuration connu ˆ l'avance | 20 | // lorsque on veut utiliser un fichier de configuration connu à l'avance |
21 | //c.load("config3.xml"); | 21 | //c.load("config3.xml"); |
22 | 22 | ||
23 | //on peut rŽcupŽrer Žgalement les paramtres en ligne de commande | 23 | //on peut récupérer également les paramètres en ligne de commande |
24 | //en cas de conflit avec le fichier de configuration, c'est la ligne de commande qui est prioritaire | 24 | //en cas de conflit avec le fichier de configuration, c'est la ligne de commande qui est prioritaire |
25 | //c.setParamsFromCmdLine(args); // on peut ajouter des paramtres en ligne de commande Žgalement (nom du fichier, nombre de frontires ˆ calculer, ...) | 25 | //c.setParamsFromCmdLine(args); // on peut ajouter des paramètres en ligne de commande également (nom du fichier, nombre de frontières à calculer, ...) |
26 | 26 | ||
27 | //c.save("config.xml"); | 27 | //c.save("config.xml"); |
28 | 28 | ||
29 | /* pour passer un fichier de configuration en paramtre | 29 | /* pour passer un fichier de configuration en paramètre |
30 | DefaultConfig cc = new DefaultConfig(); | 30 | DefaultConfig cc = new DefaultConfig(); |
31 | cc.setParamsFromCmdLine(args); | 31 | cc.setParamsFromCmdLine(args); |
32 | DefaultConfig c = new DefaultConfig(); | 32 | DefaultConfig c = new DefaultConfig(); |
33 | if (cc.getParam("config") != null) | 33 | if (cc.getParam("config") != null) |
34 | c.load(cc.getParam("config")); | 34 | c.load(cc.getParam("config")); |
35 | c.setParamsFromCmdLine(args); | 35 | c.setParamsFromCmdLine(args); |
36 | c.save("config3.xml"); | 36 | c.save("config3.xml"); |
37 | */ | 37 | */ |
38 | System.out.println(c.toString()); | 38 | System.out.println(c.toString()); |
39 | 39 | ||
40 | //-------------------------------------------------------------------------- | 40 | //-------------------------------------------------------------------------- |
41 | //InputData input = new InputData(c, c.getParam("file")); | 41 | //InputData input = new InputData(c, c.getParam("file")); |
42 | DefaultInputData input = new DefaultInputData(c, "0.xml"); | 42 | //DefaultInputData input = new DefaultInputData(c, "0.xml"); |
43 | DefaultInputData input = new DefaultInputData(c, args[0]); | ||
43 | 44 | ||
44 | //-------------------------------------------------------------------------- | 45 | //-------------------------------------------------------------------------- |
45 | DefaultLexicalChainList chains = new DefaultLexicalChainList(input); | 46 | DefaultLexicalChainList chains = new DefaultLexicalChainList(input); |
46 | 47 | ||
47 | /* impression de la trace du calcul des liens lexicaux | 48 | /* impression de la trace du calcul des liens lexicaux |
48 | System.out.println("Liste des phrases"); | 49 | System.out.println("Liste des phrases"); |
49 | System.out.println("================="); | 50 | System.out.println("================="); |
50 | System.out.println(input.toString()); | 51 | System.out.println(input.toString()); |
51 | 52 | ||
52 | System.out.println("\nDictionnaire des lemmes"); | 53 | System.out.println("\nDictionnaire des lemmes"); |
53 | System.out.println("======================="); | 54 | System.out.println("======================="); |
54 | System.out.println(input.lemmaDict.toString()); | 55 | System.out.println(input.lemmaDict.toString()); |
55 | 56 | ||
56 | System.out.println("\nChaines lexicales"); | 57 | System.out.println("\nChaines lexicales"); |
57 | System.out.println("================="); | 58 | System.out.println("================="); |
58 | System.out.println(chains.toString(false, false)); | 59 | System.out.println(chains.toString(false, false)); |
59 | */ | 60 | */ |
60 | //-------------------------------------------------------------------------- | 61 | //-------------------------------------------------------------------------- |
61 | 62 | ||
62 | DefaultGapsScores scores = new DefaultGapsScores(chains, input.sentenceCount()); | 63 | DefaultGapsScores scores = new DefaultGapsScores(chains, input.sentenceCount()); |
63 | 64 | ||
64 | // choix du calcul des valeurs affectŽes aux intervalles | 65 | // choix du calcul des valeurs affectées aux intervalles |
65 | // fonction automatiquement lancŽe ˆ l'initialisation : scores.compute_cos(); //similaritŽs cosine | 66 | // fonction automatiquement lancée à l'initialisation : scores.compute_cos(); //similarités cosine |
66 | System.out.println(scores.to_string()); | 67 | System.out.println(scores.to_string()); |
67 | 68 | ||
68 | //les autres fonctions de calcul des scores sont facultatives, et peuvent tre lancŽes successivement. | 69 | //les autres fonctions de calcul des scores sont facultatives, et peuvent être lancées successivement. |
69 | scores.compute_smoothing(1); //lissage du calcul des similaritŽs | 70 | scores.compute_smoothing(1); //lissage du calcul des similarités |
70 | System.out.println(scores.to_string()); | 71 | System.out.println(scores.to_string()); |
71 | //scores.compute_depth_scores(); //calcul des scores de profondeur de similaritŽ, peut s'utiliser avec ou sans lissage | 72 | //scores.compute_depth_scores(); //calcul des scores de profondeur de similarité, peut s'utiliser avec ou sans lissage |
72 | //System.out.println(scores.to_string()); | 73 | //System.out.println(scores.to_string()); |
73 | 74 | ||
74 | 75 | ||
75 | //-------------------------------------------------------------------------- | 76 | //-------------------------------------------------------------------------- |
76 | DefaultBoundaries bound = new DefaultBoundaries(scores, 9); | 77 | DefaultBoundaries bound = new DefaultBoundaries(scores, 9); |
77 | // DefaultBoundaries bound = new DefaultBoundaries(scores, c.getParam("n"); | 78 | // DefaultBoundaries bound = new DefaultBoundaries(scores, c.getParam("n"); |
78 | 79 | ||
79 | // choix du systme de calcul des frontires, en fonction du calcul choisi prŽcŽdemment | 80 | // choix du système de calcul des frontières, en fonction du calcul choisi précédemment |
80 | // il faut en choisir 1 parmi les 3 | 81 | // il faut en choisir 1 parmi les 3 |
81 | //bound.compute_min_similarities(); //ˆ utiliser aprs compute_cos et/ou compute_smoothing | 82 | //bound.compute_min_similarities(); //à utiliser après compute_cos et/ou compute_smoothing |
82 | bound.compute_loc_min(2); //ˆ utiliser aprs compute_cos et/ou compute_smoothing | 83 | bound.compute_loc_min(2); //à utiliser après compute_cos et/ou compute_smoothing |
83 | // bound.compute_max_depth(); //ˆ utiliser aprs compute_depth_scores | 84 | // bound.compute_max_depth(); //à utiliser après compute_depth_scores |
84 | 85 | ||
85 | 86 | ||
86 | //-------------------------------------------------------------------------- | 87 | //-------------------------------------------------------------------------- |
87 | //impression du rŽsultat ˆ l'Žcran | 88 | //impression du résultat à l'écran |
88 | System.out.println(bound.to_string()); //numŽros de phrases aprs lesquelles il y a une frontire thŽmatique | 89 | System.out.println(bound.to_string()); //numéros de phrases après lesquelles il y a une frontière thématique |
89 | System.out.println(input.result_lines(bound)); // sortie pour les application d'Žvaluation | 90 | System.out.println(input.result_lines(bound)); // sortie pour les application d'évaluation |
90 | // System.out.println(input.result_complete(bound)); //sortie au mme format que l'entrŽe, avec les mmes informations | 91 | // System.out.println(input.result_complete(bound)); //sortie au même format que l'entrée, avec les mêmes informations |
91 | // System.out.println(input.result_text_only(bound)); //sortie au format xml, avec uniquement le texte dŽlimitŽ par des balises <seg> | 92 | // System.out.println(input.result_text_only(bound)); //sortie au format xml, avec uniquement le texte délimité par des balises <seg> |
92 | 93 | ||
93 | 94 | ||
94 | } | 95 | } |
95 | catch (Exception e) | 96 | catch (Exception e) |
96 | { | 97 | { |
97 | e.printStackTrace(); | 98 | e.printStackTrace(); |
98 | } | 99 | } |
99 | } | 100 | } |
100 | } | 101 | } |
101 | 102 |
tools/scripts/ProcessSOLRQueries.py
1 | #!/usr/bin/python | 1 | #!/usr/bin/python |
2 | # -*- coding: utf-8 -*- | 2 | # -*- coding: utf-8 -*- |
3 | 3 | ||
4 | from urllib2 import * | 4 | from urllib2 import * |
5 | import json | 5 | import json |
6 | from pprint import pprint | 6 | from pprint import pprint |
7 | import sys | 7 | import sys |
8 | from solrinfo import * | 8 | from solrinfo import * |
9 | 9 | ||
10 | def obtainSOLRInfos(webName, query): | 10 | def obtainSOLRInfos(webName, query): |
11 | #print 'http://194.57.216.43:8080/' + webName + '/select?q='+ query + '&wt=json' | 11 | #print 'http://194.57.216.43:8080/' + webName + '/select?q='+ query + '&wt=json' |
12 | #conn = urlopen('http://194.57.216.43:8080/' + webName + '/select?q='+ query + '&wt=json') | 12 | #conn = urlopen('http://194.57.216.43:8080/' + webName + '/select?q='+ query + '&wt=json') |
13 | print 'http://'+machine+':'+port+'/' + webName + '/select?q='+ query + '&wt=json' | 13 | print 'http://'+machine+':'+port+'/' + webName + '/select?q='+ query + '&wt=json' + ' timeout = 30 ' |
14 | conn = urlopen('http://'+machine+':'+port+'/' + webName + '/select?q='+ query + '&wt=json') | 14 | conn = urlopen('http://'+machine+':'+port+'/' + webName + '/select?q='+ query + '&wt=json', timeout = 30) |
15 | rsp = json.load(conn) | 15 | rsp = json.load(conn) |
16 | conn.close() | ||
16 | keywords = "" | 17 | keywords = "" |
17 | txts = "" | 18 | txts = "" |
18 | for doc in rsp['response']['docs']: | 19 | for doc in rsp['response']['docs']: |
19 | jsonDoc = json.loads(doc['jsonDocument'].encode("utf-8")) | 20 | jsonDoc = json.loads(doc['jsonDocument'].encode("utf-8")) |
20 | if 'extractedData' in jsonDoc: | 21 | if 'extractedData' in jsonDoc: |
21 | if 'entityTags' in jsonDoc['extractedData']: | 22 | if 'entityTags' in jsonDoc['extractedData']: |
22 | for keyword in jsonDoc['extractedData']['entityTags']: | 23 | for keyword in jsonDoc['extractedData']['entityTags']: |
23 | for item in jsonDoc['extractedData']['entityTags'][keyword]: | 24 | for item in jsonDoc['extractedData']['entityTags'][keyword]: |
24 | for access in item: | 25 | for access in item: |
25 | keywords += item[access]['value'].encode("utf-8") + "\n" | 26 | keywords += item[access]['value'].encode("utf-8") + "\n" |
26 | if 'content' in jsonDoc: | 27 | if 'content' in jsonDoc: |
27 | if 'body' in jsonDoc['content']: | 28 | if 'body' in jsonDoc['content']: |
28 | if 'textBlock' in jsonDoc['content']['body']['textBlocks']: | 29 | if 'textBlock' in jsonDoc['content']['body']['textBlocks']: |
29 | for txt in jsonDoc['content']['body']['textBlocks']['textBlock']: | 30 | for txt in jsonDoc['content']['body']['textBlocks']['textBlock']: |
30 | if 'parag' in txt: | 31 | if 'parag' in txt: |
31 | for parag in txt['parag']: | 32 | for parag in txt['parag']: |
32 | for textOrMedia in parag['textOrMultimediaRef']: | 33 | for textOrMedia in parag['textOrMultimediaRef']: |
33 | if 'text' in textOrMedia: | 34 | if 'text' in textOrMedia: |
34 | txts += textOrMedia['text']['value'].encode("utf-8") | 35 | txts += textOrMedia['text']['value'].encode("utf-8") |
35 | if 'text' in jsonDoc['content']: | 36 | if 'text' in jsonDoc['content']: |
36 | for txt in jsonDoc['content']['text']: | 37 | for txt in jsonDoc['content']['text']: |
37 | txts += txt['value'].encode("utf-8") | 38 | txts += txt['value'].encode("utf-8") |
38 | return keywords, txts | 39 | return keywords, txts |
39 | 40 | ||
40 | if len(sys.argv) != 4: | 41 | if len(sys.argv) != 4: |
41 | print "BAD USAGE: <(i) input queries> <(o) keywords out file> <(o) text out file>\n" | 42 | print "BAD USAGE: <(i) input queries> <(o) keywords out file> <(o) text out file>\n" |
42 | sys.exit(-1) | 43 | sys.exit(-1) |
43 | 44 | ||
44 | fileName = sys.argv[1] | 45 | fileName = sys.argv[1] |
45 | keywordsFile = sys.argv[2] | 46 | keywordsFile = sys.argv[2] |
46 | txtsFile = sys.argv[3] | 47 | txtsFile = sys.argv[3] |
47 | 48 | ||
48 | inFile = open(fileName, "r") | 49 | inFile = open(fileName, "r") |
49 | outKeywords = open(keywordsFile, "w") | 50 | outKeywords = open(keywordsFile, "w") |
50 | outTxts = open(txtsFile, "w") | 51 | outTxts = open(txtsFile, "w") |
51 | 52 | ||
52 | lines = inFile.readlines() | 53 | lines = inFile.readlines() |
53 | for query in lines: | 54 | for query in lines: |
54 | query = query.rstrip() | 55 | query = query.rstrip() |
55 | # print query | 56 | # print query |
56 | keywords, txt = obtainSOLRInfos('solr-otmedia-document', query) | 57 | keywords, txt = obtainSOLRInfos('solr-otmedia-document', query) |
57 | outKeywords.write(keywords) | 58 | outKeywords.write(keywords) |
58 | outTxts.write(txt) | 59 | outTxts.write(txt) |
59 | keywords, txt = obtainSOLRInfos('solr-otmedia-multimedia', query) | 60 | keywords, txt = obtainSOLRInfos('solr-otmedia-multimedia', query) |
60 | outKeywords.write(keywords) | 61 | outKeywords.write(keywords) |
61 | outTxts.write(txt) | 62 | outTxts.write(txt) |
62 | 63 | ||
63 | outKeywords.close() | 64 | outKeywords.close() |
64 | outTxts.close() | 65 | outTxts.close() |
66 | inFile.close() | ||
65 | 67 |