select all nocheck Remove ############################################################################################# # this is a script mainly for searching strings within the NArche corpus # # BUT it can be certainly used for any other corpus of TextGrids # # # # subfolders can be included only to ONE sub-level # # That means you need to know if the directory contains subfolders or not # # One can also search through all interval and/or point tiers!!!! # # Or you select a tier number or name and search through if it is a point or intveral tier # # # # TODO: search modes: does not start/end with # # TODO: select / add columns: where in Label # # # # Rainer Schmitz & Sven Grawunder, MPI EVA Leipzig, 2009 # # further developed by Sven Grawunder, MPI EVA Leipzig, 2010 # ############################################################################################# form Open all files in directory choice os 1 button OSX/Linux button Windows sentence Directory /Volumes/lingboard/Department Members/Sven Grawunder/nachrichten_korpora boolean include_subfolders 1 choice tier_selection 2 button tier_name button tier_number comment Depending on what have chosen above fill in the according field! comment If you want to search through all (interval) tiers, set tier number to 0 ! word tier_name comment integer tier_number 0 (=all) comment What kind of tiers should be searched in? choice tier_type 3 button interval tiers button point tiers button both types comment What are you looking for? text stringToSearch nasal optionmenu match 3 option equal option not_equal option contains option contains_not option starts_with option ends_with option match_regex boolean add_label_content 1 endform #stringToSearch$=label$ tierToBeSearched$=tier_name$ kOtier=tier_type len=length(stringToSearch$) if not right$(directory$)=="/" or right$(directory$)=="\" if os==1 directory$=directory$+"/" else directory$=directory$+"\" endif endif clearinfo if kOtier ==1 printline index'tab$'filename'tab$'tiername'tab$'interval elif kOtier ==2 printline index'tab$'filename'tab$'tiername'tab$'point else printline index'tab$'filename'tab$'tiername'tab$'position'tab$'tiertype endif if include_subfolders==1 Create Strings as directory list... directoryList 'directory$'* nrd=Get number of strings if nrd!=0 for d to nrd select Strings directoryList dir$=Get string... d if os==1 sdirectory$=directory$+dir$+"/" else sdirectory$=directory$+dir$+"\" endif call searchtiers endfor else sdirectory$=directory$ call searchtiers endif else sdirectory$=directory$ call searchtiers endif procedure searchtiers Create Strings as file list... list 'sdirectory$'*.TextGrid numberOfFiles = Get number of strings a=0 for ifile to numberOfFiles select Strings list filename$ = Get string... ifile tgname$= filename$-".TextGrid" Read from file... 'sdirectory$''filename$' numberOfTiers=Get number of tiers if tier_selection==1 for i from 1 to numberOfTiers tierName$=Get tier name... i it=Is interval tier... i if tierName$ == "'tierToBeSearched$'" if ((kOtier ==1 and it==1) or (kOtier ==2 and it==0)) call findcontent elsif kOtier ==3 call findcontent2 else endif endif endfor else if tier_number!=0 if not tier_number > numberOfTiers i=tier_number tierName$=Get tier name... i it=Is interval tier... i if ((kOtier ==1 and it==1) or (kOtier ==2 and it==0)) call findcontent elsif kOtier ==3 call findcontent2 else endif endif else for i from 1 to numberOfTiers it=Is interval tier... i tierName$=Get tier name... i if ((kOtier ==1 and it==1) or (kOtier ==2 and it==0)) call findcontent elsif kOtier ==3 call findcontent2 else endif endfor endif endif endfor endproc procedure findcontent if it == 1 numberOfIntervals = Get number of intervals... i else numberOfIntervals = Get number of points... i endif for j from 1 to numberOfIntervals select TextGrid 'tgname$' if it==1 label$ = Get label of interval... i j else label$ = Get label of point... i j endif if match==3 #contains where=index(label$,stringToSearch$) if where!=0 a+=1 if add_label_content==1 printline 'a''tab$''tgname$''tab$''tierName$''tab$''j''tab$''label$' else printline 'a''tab$''tgname$''tab$''tierName$''tab$''j' endif endif elsif match==1 #equal if label$=="'stringToSearch$'" a+=1 if add_label_content==1 printline 'a''tab$''tgname$''tab$''tierName$''tab$''j''tab$''label$' else printline 'a''tab$''tgname$''tab$''tierName$''tab$''j' endif endif elsif match==2 #not equal if label$!="'stringToSearch$'" a+=1 if add_label_content==1 printline 'a''tab$''tgname$''tab$''tierName$''tab$''j''tab$''label$' else printline 'a''tab$''tgname$''tab$''tierName$''tab$''j' endif endif elsif match==4 #contains_not if index(label$,stringToSearch$)==0 a+=1 if add_label_content==1 printline 'a''tab$''tgname$''tab$''tierName$''tab$''j''tab$''label$' else printline 'a''tab$''tgname$''tab$''tierName$''tab$''j' endif endif elsif match==5 #starts_with if index(label$,stringToSearch$)==1 a+=1 if add_label_content==1 printline 'a''tab$''tgname$''tab$''tierName$''tab$''j''tab$''label$' else printline 'a''tab$''tgname$''tab$''tierName$''tab$''j' endif endif elsif match==6 #ends_with endoflab$=right$(label$,len) if endoflab$=="'stringToSearch$'" a+=1 if add_label_content==1 printline 'a''tab$''tgname$''tab$''tierName$''tab$''j''tab$''label$' else printline 'a''tab$''tgname$''tab$''tierName$''tab$''j' endif endif elsif match==7 #regex where=index_regex(label$,stringToSearch$) if where!=0 a+=1 if add_label_content==1 printline 'a''tab$''tgname$''tab$''tierName$''tab$''j''tab$''label$' else printline 'a''tab$''tgname$''tab$''tierName$''tab$''j' endif endif endif endfor endproc procedure findcontent2 if it == 1 numberOfIntervals = Get number of intervals... i else numberOfIntervals = Get number of points... i endif for j from 1 to numberOfIntervals select TextGrid 'tgname$' if it==1 label$ = Get label of interval... i j else label$ = Get label of point... i j endif if match==3 #contains where=index(label$,stringToSearch$) if where!=0 a+=1 if add_label_content==1 printline 'a''tab$''tgname$''tab$''tierName$''tab$''j''tab$''it''tab$''label$' else printline 'a''tab$''tgname$''tab$''tierName$''tab$''j''tab$''it' endif endif elsif match==1 #equal if label$=="'stringToSearch$'" a+=1 if add_label_content==1 printline 'a''tab$''tgname$''tab$''tierName$''tab$''j''tab$''it''tab$''label$' else printline 'a''tab$''tgname$''tab$''tierName$''tab$''j''tab$''it' endif endif elsif match==2 #not equal if label$!="'stringToSearch$'" a+=1 if add_label_content==1 printline 'a''tab$''tgname$''tab$''tierName$''tab$''j''tab$''it''tab$''label$' else printline 'a''tab$''tgname$''tab$''tierName$''tab$''j''tab$''it' endif endif elsif match==4 #contains_not if index(label$,stringToSearch$)==0 a+=1 if add_label_content==1 printline 'a''tab$''tgname$''tab$''tierName$''tab$''j''tab$''it''tab$''label$' else printline 'a''tab$''tgname$''tab$''tierName$''tab$''j''tab$''it' endif endif elsif match==5 #starts_with if index(label$,stringToSearch$)==1 a+=1 if add_label_content==1 printline 'a''tab$''tgname$''tab$''tierName$''tab$''j''tab$''it''tab$''label$' else printline 'a''tab$''tgname$''tab$''tierName$''tab$''j''tab$''it' endif endif elsif match==6 #ends_with endoflab$=right$(label$,len) if endoflab$=="'stringToSearch$'" a+=1 if add_label_content==1 printline 'a''tab$''tgname$''tab$''tierName$''tab$''j''tab$''it''tab$''label$' else printline 'a''tab$''tgname$''tab$''tierName$''tab$''j''tab$''it' endif endif elsif match==7 #regex where=index_regex(label$,stringToSearch$) if where!=0 a+=1 if add_label_content==1 printline 'a''tab$''tgname$''tab$''tierName$''tab$''j''tab$''it''tab$''label$' else printline 'a''tab$''tgname$''tab$''tierName$''tab$''j''tab$''it' endif endif endif endfor endproc