├── .gitattributes ├── gitDocs ├── Splash.png └── CWR_Example.png ├── VocabulateSrc ├── Resources │ ├── vocab.ico │ ├── 1872_Expression_F1142_fig18.jpg │ ├── StopListCharacters.txt │ └── StopListEN.txt ├── App.config ├── Properties │ ├── Settings.settings │ ├── Settings.Designer.cs │ ├── AssemblyInfo.cs │ ├── Resources.resx │ └── Resources.Designer.cs ├── Splash.cs ├── Program.cs ├── StopWordRemover.cs ├── DictData.cs ├── _TwitterAwareTokenizerNET.cs ├── Splash.Designer.cs ├── Vocabulate.csproj ├── LoadDictionary.cs ├── CSVParser.cs ├── MainForm.Designer.cs ├── MainForm.cs └── MainForm.resx ├── LICENSE ├── Vocabulate.sln ├── README.MD ├── Dictionary Files └── 2019-07-30 - AEV_Dict.csv └── .gitignore /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /gitDocs/Splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanboyd/Vocabulate/HEAD/gitDocs/Splash.png -------------------------------------------------------------------------------- /gitDocs/CWR_Example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanboyd/Vocabulate/HEAD/gitDocs/CWR_Example.png -------------------------------------------------------------------------------- /VocabulateSrc/Resources/vocab.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanboyd/Vocabulate/HEAD/VocabulateSrc/Resources/vocab.ico -------------------------------------------------------------------------------- /VocabulateSrc/Resources/1872_Expression_F1142_fig18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ryanboyd/Vocabulate/HEAD/VocabulateSrc/Resources/1872_Expression_F1142_fig18.jpg -------------------------------------------------------------------------------- /VocabulateSrc/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /VocabulateSrc/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /VocabulateSrc/Splash.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using System.Windows.Forms; 10 | 11 | namespace Vocabulate 12 | { 13 | public partial class Splash : Form 14 | { 15 | public Splash() 16 | { 17 | InitializeComponent(); 18 | } 19 | 20 | private void timer1_Tick(object sender, EventArgs e) 21 | { 22 | this.Close(); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /VocabulateSrc/Resources/StopListCharacters.txt: -------------------------------------------------------------------------------- 1 | ` 2 | ~ 3 | ! 4 | @ 5 | # 6 | $ 7 | % 8 | ^ 9 | & 10 | * 11 | ( 12 | ) 13 | _ 14 | + 15 | - 16 | = 17 | [ 18 | ] 19 | \ 20 | ; 21 | ' 22 | , 23 | . 24 | / 25 | { 26 | } 27 | | 28 | : 29 | " 30 | < 31 | > 32 | ? 33 | .. 34 | ... 35 | « 36 | «« 37 | »» 38 | “ 39 | ” 40 | ‘ 41 | ‘‘ 42 | ’ 43 | ’’ 44 | 1 45 | 2 46 | 3 47 | 4 48 | 5 49 | 6 50 | 7 51 | 8 52 | 9 53 | 0 54 | 10 55 | 11 56 | 12 57 | 13 58 | 14 59 | 15 60 | 16 61 | 17 62 | 18 63 | 19 64 | 20 65 | 25 66 | 30 67 | 33 68 | 40 69 | 50 70 | 60 71 | 66 72 | 70 73 | 75 74 | 80 75 | 90 76 | 99 77 | 100 78 | 123 79 | 1000 80 | 10000 81 | 12345 82 | 100000 83 | 1000000 -------------------------------------------------------------------------------- /VocabulateSrc/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using System.Windows.Forms; 6 | 7 | namespace VocabulateApplication 8 | { 9 | static class Program 10 | { 11 | /// 12 | /// The main entry point for the application. 13 | /// 14 | [STAThread] 15 | static void Main() 16 | { 17 | Application.EnableVisualStyles(); 18 | Application.SetCompatibleTextRenderingDefault(false); 19 | 20 | Application.Run(new Vocabulate.Splash()); 21 | 22 | Application.Run(new VocabulateMainForm()); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Ryan L. Boyd 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /VocabulateSrc/StopWordRemover.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text.RegularExpressions; 4 | 5 | namespace Vocabulate 6 | { 7 | class StopWordRemover 8 | { 9 | 10 | private HashSet StopWordsNoWildcards { get; set; } 11 | private Regex[] StopWordsWildCards { get; set; } 12 | 13 | public void BuildStopList(string StopListRawText) 14 | { 15 | 16 | StopWordsNoWildcards = new HashSet(); 17 | 18 | string[] StopListArray = StopListRawText.ToLower().Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None); 19 | foreach(string StopWord in StopListArray) 20 | { 21 | StopWordsNoWildcards.Add(StopWord.Trim()); 22 | } 23 | } 24 | 25 | public string[] ClearStopWords(string[] WordList) 26 | { 27 | 28 | for(int i = 0; i < WordList.Length; i++) 29 | { 30 | if (StopWordsNoWildcards.Contains(WordList[i])) WordList[i] = ""; 31 | } 32 | 33 | return WordList; 34 | 35 | } 36 | 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /VocabulateSrc/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace Vocabulate.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Vocabulate.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.30503.244 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vocabulate", "VocabulateSrc\Vocabulate.csproj", "{FD197B2D-2C43-46CA-8910-E9BCF51EEAA4}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {FD197B2D-2C43-46CA-8910-E9BCF51EEAA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {FD197B2D-2C43-46CA-8910-E9BCF51EEAA4}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {FD197B2D-2C43-46CA-8910-E9BCF51EEAA4}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {FD197B2D-2C43-46CA-8910-E9BCF51EEAA4}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {E1B2C7CE-1D6C-4E0C-BDF5-39AB197D5BC8} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /VocabulateSrc/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Vocabulate")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("Ryan L. Boyd, Ph.D.")] 12 | [assembly: AssemblyProduct("Vocabulate")] 13 | [assembly: AssemblyCopyright("Copyright © 2019")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("fd197b2d-2c43-46ca-8910-e9bcf51eeaa4")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("0.91.0.0")] 36 | [assembly: AssemblyFileVersion("0.91.0.0")] 37 | -------------------------------------------------------------------------------- /VocabulateSrc/DictData.cs: -------------------------------------------------------------------------------- 1 | 2 | using System.Collections.Generic; 3 | using System.Text.RegularExpressions; 4 | 5 | namespace Vocabulate 6 | { 7 | public class DictionaryData 8 | { 9 | 10 | public string TextFileFolder { get; set; } 11 | public string OutputFileLocation { get; set; } 12 | 13 | public int NumCats { get; set; } 14 | public int MaxWords { get; set; } 15 | 16 | public string[] CatNames { get; set; } 17 | public bool RawWordCounts { get; set; } 18 | 19 | public string StopListRawText { get; set; } 20 | 21 | public char CSVDelimiter { get; set; } 22 | public char CSVQuote { get; set; } 23 | 24 | public bool OutputCapturedText { get; set; } 25 | 26 | public Dictionary CategoryOrder { get; set; } 27 | 28 | //yeah, we're going full inception with this variable. dictionary inside of a dictionary inside of a dictionary 29 | //while it might seem unnecessarily complicated (and it might be), it makes sense. 30 | //the first level simply differentiates the wildcard entries from the non-wildcard entries 31 | //The second level is purely to refer to the word length -- does each sub-entry include 1-word entries, 2-word entries, etc? 32 | //the third level contains the actual entries from the user's dictionary file 33 | 34 | 35 | //ConceptMap: 36 | //{Concept, [TopLevelCategories]} 37 | 38 | public Dictionary ConceptMap { get; set; } 39 | 40 | //FullDictionaryMap 41 | 42 | //WordList: 43 | //string length (in words) 44 | //{Word, Concept} 45 | //WildCardWordList: 46 | //string length (in words) 47 | //{Word, Concept} 48 | 49 | 50 | 51 | public Dictionary>> FullDictionaryMap { get; set; } 52 | 53 | //this dictionary simply maps the specific wildcard entries to arrays, this way we can iterate across them since we have to do a serial search 54 | //when we're using wildcards 55 | public Dictionary WildCardArrays { get; set; } 56 | 57 | //lastly, this contains the precompiled regexes mapped to their original strings 58 | public Dictionary PrecompiledWildcards { get; set; } 59 | 60 | public bool DictionaryLoaded { get; set; } = false; 61 | 62 | 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /README.MD: -------------------------------------------------------------------------------- 1 | # Vocabulate 2 | 3 | ![banner](gitDocs/Splash.png) 4 | 5 | This page contains the source code for Vocabulate, the software used for: 6 | 7 | Vine, V., Boyd, R. L., & Pennebaker, J. W. (2020). Natural emotion vocabularies as windows on distress and well-being. Nature Communications, 11(1), 4525. https://doi.org/10.1038/s41467-020-18349-0 8 | 9 | Note that the software can be compiled from the code on this page, or you can download and run the executable for the program from the [release page](https://github.com/ryanboyd/Vocabulate/releases). 10 | 11 | Note that this software is no longer in active development, although we plan to make the software slightly more obvious in the near future (e.g., with an instructional YouTube video). The functionality of Vocabulate has been folded into some more modern text analysis software named [BUTTER](https://www.butter.tools/) — you can get the same functionality from BUTTER using the "Concept-Category Diversity" plugin. 12 | 13 | # Interpreting Vocabulate Output 14 | 15 | * **WC: Word Count** 16 | * Total number of words 17 | 18 | * **TC_Raw: Token Count, Raw** 19 | * Total number of tokens. This is like word count, but separately includes things like punctuation, etc. 20 | 21 | * **TTR_Raw: Type-Token Ratio, Raw** 22 | * Type-Token ratio is just the number of unique tokens divided by the total number of tokens (a standard measure of vocabulary spread in linguistics). This is the TTR on the raw tokens 23 | 24 | * **TC_Clean: Token Count, Clean** 25 | * Token count after stop words are removed from text. 26 | 27 | * **TTR_Clean: Type-Token Ratio, Clean** 28 | * TTR, but calculated after stop words have been removed 29 | 30 | * **TC_NonDict: Token Count, Non-Dictionary Words** 31 | * Total number of tokens that were not captured by the loaded vocabulate dictionary 32 | 33 | * **TTR_NonDict: Type-Token Ratio of Non-Dictionary Words** 34 | * This is the TTR calculated on the vocabulary that is not captured by your dictionary. Can be thought of as a control variable: you may want to control for TTR in your statistical models but without cross-contamination from your dictionary words 35 | 36 | * **DictPercent: Percentage of Dictionary Words** 37 | * Total percent of your text that was captured by the loaded dictionary 38 | 39 | * **[CategoryName]_CWR: Concept-Word Ratio** 40 | * This the the number of unique concepts (e.g., happiness, joy, wonderment) from any given category (e.g., positive affect), divided by word count. This is the critical measure used in our publication. An example of how this measure would be calculated: 41 | ![banner](gitDocs/CWR_Example.png) 42 | 43 | * **[CategoryName]_CCR: Concept-Category Ratio** 44 | * This is the total number of concepts for the category divided by the total number of times the category was invoked in a given text. For example, the concepts "happy, joy, wonderful" gives the positive emotion CCR score 100% (3/3). The concepts "happy, happy, happy" result in a positive CCR score of 33% (1 unique concept divided by 3 invocations of the positive emotion category). Note that this score is vastly more sensitive to tiny perturbations than the CWR score. 45 | 46 | * **[CategoryName]_Count** 47 | * Number of words belonging to the specified category found within the text. 48 | 49 | * **[CategoryName]_Unique** 50 | * Number of unique words belonging to the category found within the text. Dividing this score by Word Count then multiplying by 100 results in the CWR score. Diving this word by the "Count" variable from the same category results in the CCR score. 51 | -------------------------------------------------------------------------------- /Dictionary Files/2019-07-30 - AEV_Dict.csv: -------------------------------------------------------------------------------- 1 | Concepts,Neg,Pos,AnxFear,Anger,Sadness,NegUndiff 2 | afraid,X,,X,,, 3 | aggravat*,X,,,X,, 4 | agitat*,X,,,,, 5 | agony,X,,,,, 6 | alarm*,X,,X,,, 7 | alone,X,,,,X, 8 | anger|angr*,X,,,X,, 9 | anguish*,X,,,,X, 10 | annoy*,X,,,X,, 11 | anxi*,X,,X,,, 12 | apath*,X,,,,X, 13 | appall*,X,,X,X,, 14 | apprehens*,X,,X,,, 15 | asham*,X,,,,, 16 | ashame*,X,,,,, 17 | aversi*,X,,,,, 18 | bitter,X,,,,X, 19 | contempt,X,,,X,, 20 | crushed,X,,,,X, 21 | depress*,X,,,,X, 22 | despair,X,,,,X, 23 | desperate*,X,,,,, 24 | despis*,X,,,X,, 25 | devastat*,X,,,,X, 26 | disappoint*,X,,,,X, 27 | discourage*,X,,,,X, 28 | disgust,X,,,,, 29 | dishearten*,X,,,,X, 30 | disillusion*,X,,,,X, 31 | dislike|disliked|dislikes|disliking,X,,,,, 32 | dismay*,X,,,,X, 33 | dissatisf*,X,,,,X, 34 | distraught,X,,,,, 35 | disturb*,X,,,,, 36 | doom,X,,X,,X, 37 | dread*,X,,X,,, 38 | embarrass*,X,,,,, 39 | envy|envie*|envious,X,,,,, 40 | fear|feared|fearful|fearing|fears,X,,X,,, 41 | frantic,X,,X,,, 42 | fright,X,,X,,, 43 | frustrat*,X,,,X,, 44 | fury|furious,X,,,X,, 45 | gloom,X,,,,X, 46 | grief|griev*,X,,,,X, 47 | guilt*,X,,,,, 48 | hate|hated|hateful|hater|hates|hating|hatred,X,,,X,, 49 | heartbreak*|heartbroke*,X,,,,X, 50 | helpless,X,,,,X, 51 | homesick,X,,,,X, 52 | hopeless,X,,,,X, 53 | horror*|horrif*,X,,X,,, 54 | hostil*,X,,,X,, 55 | humiliat*,X,,,,, 56 | hurt,X,,,,, 57 | insecur*,X,,,,, 58 | intimidat*,X,,,,, 59 | irrita*,X,,,X,, 60 | jealous*,X,,,,, 61 | lone*,X,,,,X, 62 | longing,X,,,,X, 63 | loss,X,,,,X, 64 | mad|maddening|madder|maddest,X,,,X,, 65 | melanchol*,X,,,,X, 66 | miss,X,,,,X, 67 | mourn,X,,,,X, 68 | nervous,X,,X,,, 69 | offend|offence|offens*,X,,,X,, 70 | outrag*,X,,,X,, 71 | panic,X,,X,,, 72 | paranoi*,X,,X,,, 73 | petrif*,X,,X,,, 74 | phobi*,X,,X,,, 75 | pity,X,,,,, 76 | rage,X,,,X,, 77 | regret*,X,,,,X, 78 | reluctan*,X,,,,, 79 | remorse*,X,,,,X, 80 | resent*,X,,,X,, 81 | restless,X,,,,, 82 | sad|sadde*|sadly|sadness,X,,,,X, 83 | scared|scare|scaring|scary,X,,X,,, 84 | shock*,X,,,,, 85 | solemn*,X,,,,X, 86 | sorrow,X,,,,X, 87 | startl*,X,,X,,, 88 | stunned,X,,,,, 89 | terror|terrifies|terrified|terrify*,X,,X,,, 90 | turmoil,X,,,,, 91 | unhapp*,X,,,,X, 92 | unlov*,X,,,,X, 93 | woe*,X,,,,X, 94 | worr*,X,,X,,, 95 | yearn*,X,,,,X, 96 | awful,,,,,,X 97 | bad,,,,,,X 98 | crap|crappy*,,,,,,X 99 | craz*,,,,,,X 100 | distress*,,,,,,X 101 | emotional,,,,,,X 102 | horribl*,,,,,,X 103 | numb|numbed|numbs|numbing|numbly|numbness*,,,,,,X 104 | overwhelm*,,,,,,X 105 | rotten,,,,,,X 106 | stress*,,,,,,X 107 | sucky,,,,,,X 108 | terribl*,,,,,,X 109 | unpleasant,,,,,,X 110 | upset*,,,,,,X 111 | admir*,,X,,,, 112 | ador*,,X,,,, 113 | affection*,,X,,,, 114 | amor*,,X,,,, 115 | amus*,,X,,,, 116 | appreciat*,,X,,,, 117 | cheer|cheery|cheeriness*|cheerily|cheerful*,,X,,,, 118 | cherish*,,X,,,, 119 | compassion*,,X,,,, 120 | confident*|confidence,,X,,,, 121 | content|contented*|contentment,,X,,,, 122 | curious*,,X,,,, 123 | delight*,,X,,,, 124 | eager*,,X,,,, 125 | ecsta*,,X,,,, 126 | elated*|elation,,X,,,, 127 | enjoy*,,X,,,, 128 | enraptur*,,X,,,, 129 | entertain*,,X,,,, 130 | enthrall*,,X,,,, 131 | enthus*,,X,,,, 132 | euphori*,,X,,,, 133 | excit*,,X,,,, 134 | exhil*,,X,,,, 135 | fond|fondly|fondness*,,X,,,, 136 | glad|gladly|gladness*,,X,,,, 137 | glee|gleeful*,,X,,,, 138 | gratef*|gratitude*,,X,,,, 139 | happy|happi*,,X,,,, 140 | hope|hopeful*|hopefulness,,X,,,, 141 | inspired*,,X,,,, 142 | interest*,,X,,,, 143 | joll*,,X,,,, 144 | joy*,,X,,,, 145 | keen*,,X,,,, 146 | love|loved|loves|loving*,,X,,,, 147 | merr*,,X,,,, 148 | optimis*,,X,,,, 149 | passion*,,X,,,, 150 | peace*,,X,,,, 151 | pleased|pleasant*|pleasur*,,X,,,, 152 | proud*|pride*,,X,,,, 153 | relief|reliev*,,X,,,, 154 | resolv*,,X,,,, 155 | satisf*,,X,,,, 156 | secur*,,X,,,, 157 | serene|serenit*,,X,,,, 158 | surpris*,,X,,,, 159 | thankf*,,X,,,, 160 | thrill*,,X,,,, 161 | tranquil*,,X,,,, 162 | triumph*,,X,,,, 163 | vigor|revigor*|invigor*|vigour,,X,,,, 164 | -------------------------------------------------------------------------------- /VocabulateSrc/_TwitterAwareTokenizerNET.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text.RegularExpressions; 4 | 5 | namespace nltk.tokenize.casual.NET 6 | { 7 | 8 | 9 | public class TwitterAwareTokenizer 10 | { 11 | 12 | 13 | private string URLS { get; set; } = @"(?:https?:(?:/{1,3}|[a-z0-9%])|[a-z0-9.\-]+[.](?:[a-z]{2,13})/)(?:[^\s()<>{}\[\]]+|\([^\s()]*?\([^\s()]+\)[^\s()]*?\)|\([^\s]+?\))+(?:\([^\s()]*?\([^\s()]+\)[^\s()]*?\)|\([^\s]+?\)|[^\s`!()\[\]{};:'"".,<>?«»“”‘’])|(?:[a-z0-9]+(?:[.\-][a-z0-9]+)*[.](?:[a-z]{2,13})\b/?(?!@))"; 14 | private string EMOTICONS { get; set; } = @"(?:[<>]?[:;=8][\-o\*\']?[\)\]\(\[dDpP/\:\}\{@\|\\]|[\)\]\(\[dDpP/\:\}\{@\|\\][\-o\*\']?[:;=8][<>]?|<3)"; 15 | private string PHONENUMBERS { get; set; } = @"(?:(?:\+?[01][*\-.\)]*)?(?:[\(]?\d{3}[*\-.\)]*)?\d{3}[*\-.\)]*\d{4})"; 16 | private string HTMLTAGS { get; set; } = @"<[^>\s]+>"; 17 | private string ASCII_ARROWS { get; set; } = @"[\-]+>|<[\-]+"; 18 | private string TWITTER_USERNAMES { get; set; } = @"(?:@[\w_]+)"; 19 | private string TWITTER_HASHTAG { get; set; } = @"(?:\#+[\w_]+[\w\'_\-]*[\w_]+)"; 20 | private string EMAIL { get; set; } = @"[\w.+-]+@[\w-]+\.(?:[\w-]\.?)+[\w-]"; 21 | private string REMAINING_WORD_TYPES { get; set; } = @"(?:[^\W\d_](?:[^\W\d_]|['\-_])+[^\W\d_])|(?:[+\-]?\d+[,/.:-]\d+[+\-]?)|(?:[\w_]+)|(?:\.(?:\s*\.){1,})|(?:\S)"; 22 | 23 | 24 | private Regex WORD_RE; 25 | public Regex WORD_RE_ACCESS 26 | { 27 | get { return WORD_RE; } 28 | set { WORD_RE = value; } 29 | 30 | } 31 | 32 | private Regex HANG_RE { get; set; } = new Regex(@"([^a-zA-Z0-9])\1{3,}", RegexOptions.Compiled); 33 | private Regex EMOTICON_RE { get; set; } 34 | private Regex ENT_RE { get; set; } = new Regex(@"&(#?(x?))([^&;\s]+);"); 35 | 36 | private Regex Reduce_Lengthening_Regex { get; set; } = new Regex(@"(.)\1{2,}", RegexOptions.Compiled); 37 | 38 | 39 | public void Initialize_Regex() 40 | { 41 | List All_Regex_List = new List(); 42 | All_Regex_List.Add(URLS); 43 | All_Regex_List.Add(PHONENUMBERS); 44 | All_Regex_List.Add(EMOTICONS); 45 | All_Regex_List.Add(HTMLTAGS); 46 | All_Regex_List.Add(ASCII_ARROWS); 47 | All_Regex_List.Add(TWITTER_USERNAMES); 48 | All_Regex_List.Add(TWITTER_HASHTAG); 49 | All_Regex_List.Add(EMAIL); 50 | All_Regex_List.Add(REMAINING_WORD_TYPES); 51 | 52 | string[] AllRegexArray = All_Regex_List.ToArray(); 53 | 54 | this.WORD_RE_ACCESS = new Regex(String.Join("|", AllRegexArray), RegexOptions.Compiled | RegexOptions.IgnoreCase); 55 | EMOTICON_RE = new Regex(EMOTICONS, RegexOptions.IgnoreCase); 56 | 57 | } 58 | 59 | private string reduce_lengthening(string text) 60 | { 61 | return Reduce_Lengthening_Regex.Replace(text, @"$1$1$1"); 62 | } 63 | 64 | 65 | 66 | public string[] tokenize(string text, bool reduce_lengthening = true, bool preserve_case = false) 67 | { 68 | 69 | if (reduce_lengthening) text = this.reduce_lengthening(text); 70 | 71 | string safe_text = HANG_RE.Replace(text, @"$1$1$1"); 72 | 73 | MatchCollection mc = WORD_RE.Matches(safe_text); 74 | 75 | string[] words = new string[mc.Count]; 76 | 77 | for (int i = 0; i < words.Length; i++) words[i] = mc[i].Groups[0].Value; 78 | 79 | if (preserve_case == false) 80 | { 81 | for (uint i = 0; i < words.Length; i++) 82 | { 83 | if (EMOTICON_RE.Matches(words[i]).Count == 0) 84 | { 85 | words[i] = words[i].ToLower(); 86 | } 87 | } 88 | } 89 | 90 | return words; 91 | } 92 | 93 | 94 | public string[] TokenizeWhitespace(string text) 95 | { 96 | 97 | return text.Trim().Split(new char[0], options: StringSplitOptions.RemoveEmptyEntries); 98 | 99 | } 100 | 101 | 102 | 103 | 104 | } 105 | 106 | 107 | } 108 | 109 | -------------------------------------------------------------------------------- /VocabulateSrc/Splash.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace Vocabulate 2 | { 3 | partial class Splash 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.components = new System.ComponentModel.Container(); 32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Splash)); 33 | this.pictureBox1 = new System.Windows.Forms.PictureBox(); 34 | this.label1 = new System.Windows.Forms.Label(); 35 | this.label2 = new System.Windows.Forms.Label(); 36 | this.timer1 = new System.Windows.Forms.Timer(this.components); 37 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); 38 | this.SuspendLayout(); 39 | // 40 | // pictureBox1 41 | // 42 | this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; 43 | this.pictureBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 44 | this.pictureBox1.ErrorImage = global::Vocabulate.Properties.Resources._1872_Expression_F1142_fig18; 45 | this.pictureBox1.Image = global::Vocabulate.Properties.Resources._1872_Expression_F1142_fig18; 46 | this.pictureBox1.Location = new System.Drawing.Point(28, 12); 47 | this.pictureBox1.Name = "pictureBox1"; 48 | this.pictureBox1.Size = new System.Drawing.Size(344, 316); 49 | this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; 50 | this.pictureBox1.TabIndex = 0; 51 | this.pictureBox1.TabStop = false; 52 | this.pictureBox1.UseWaitCursor = true; 53 | // 54 | // label1 55 | // 56 | this.label1.AutoSize = true; 57 | this.label1.BackColor = System.Drawing.Color.Transparent; 58 | this.label1.Font = new System.Drawing.Font("Calibri", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 59 | this.label1.Location = new System.Drawing.Point(121, 337); 60 | this.label1.Name = "label1"; 61 | this.label1.Size = new System.Drawing.Size(162, 26); 62 | this.label1.TabIndex = 1; 63 | this.label1.Text = "Vocabulate v0.91"; 64 | this.label1.UseWaitCursor = true; 65 | // 66 | // label2 67 | // 68 | this.label2.AutoSize = true; 69 | this.label2.Font = new System.Drawing.Font("Calibri", 9.75F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0))); 70 | this.label2.Location = new System.Drawing.Point(139, 367); 71 | this.label2.Name = "label2"; 72 | this.label2.Size = new System.Drawing.Size(126, 15); 73 | this.label2.TabIndex = 2; 74 | this.label2.Text = "by Ryan L. Boyd, Ph.D."; 75 | this.label2.UseWaitCursor = true; 76 | // 77 | // timer1 78 | // 79 | this.timer1.Enabled = true; 80 | this.timer1.Interval = 3000; 81 | this.timer1.Tick += new System.EventHandler(this.timer1_Tick); 82 | // 83 | // Splash 84 | // 85 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 86 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 87 | this.BackColor = System.Drawing.Color.CadetBlue; 88 | this.ClientSize = new System.Drawing.Size(400, 400); 89 | this.ControlBox = false; 90 | this.Controls.Add(this.label2); 91 | this.Controls.Add(this.label1); 92 | this.Controls.Add(this.pictureBox1); 93 | this.DoubleBuffered = true; 94 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 95 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 96 | this.ImeMode = System.Windows.Forms.ImeMode.Off; 97 | this.MaximizeBox = false; 98 | this.MaximumSize = new System.Drawing.Size(400, 400); 99 | this.MinimizeBox = false; 100 | this.MinimumSize = new System.Drawing.Size(400, 400); 101 | this.Name = "Splash"; 102 | this.ShowIcon = false; 103 | this.ShowInTaskbar = false; 104 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 105 | this.Text = "Splash"; 106 | this.UseWaitCursor = true; 107 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); 108 | this.ResumeLayout(false); 109 | this.PerformLayout(); 110 | 111 | } 112 | 113 | #endregion 114 | 115 | private System.Windows.Forms.PictureBox pictureBox1; 116 | private System.Windows.Forms.Label label1; 117 | private System.Windows.Forms.Label label2; 118 | private System.Windows.Forms.Timer timer1; 119 | } 120 | } -------------------------------------------------------------------------------- /VocabulateSrc/Vocabulate.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {FD197B2D-2C43-46CA-8910-E9BCF51EEAA4} 8 | WinExe 9 | Properties 10 | Vocabulate 11 | Vocabulate 12 | v4.6.2 13 | 512 14 | true 15 | 16 | publish\ 17 | true 18 | Disk 19 | false 20 | Foreground 21 | 7 22 | Days 23 | false 24 | false 25 | true 26 | 0 27 | 1.0.0.%2a 28 | false 29 | false 30 | true 31 | 32 | 33 | AnyCPU 34 | true 35 | full 36 | false 37 | bin\Debug\ 38 | DEBUG;TRACE 39 | prompt 40 | 4 41 | false 42 | 43 | 44 | AnyCPU 45 | pdbonly 46 | true 47 | bin\Release\ 48 | TRACE 49 | prompt 50 | 4 51 | false 52 | 53 | 54 | VocabulateApplication.Program 55 | 56 | 57 | Resources\vocab.ico 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | Form 80 | 81 | 82 | MainForm.cs 83 | 84 | 85 | 86 | 87 | True 88 | True 89 | Resources.resx 90 | 91 | 92 | Form 93 | 94 | 95 | Splash.cs 96 | 97 | 98 | 99 | 100 | MainForm.cs 101 | 102 | 103 | ResXFileCodeGenerator 104 | Designer 105 | Resources.Designer.cs 106 | 107 | 108 | Splash.cs 109 | 110 | 111 | SettingsSingleFileGenerator 112 | Settings.Designer.cs 113 | 114 | 115 | True 116 | Settings.settings 117 | True 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | False 133 | Microsoft .NET Framework 4.6.1 %28x86 and x64%29 134 | true 135 | 136 | 137 | False 138 | .NET Framework 3.5 SP1 139 | false 140 | 141 | 142 | 143 | 150 | -------------------------------------------------------------------------------- /VocabulateSrc/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\Resources\StopListCharacters.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8 123 | 124 | 125 | ..\Resources\StopListEN.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 126 | 127 | 128 | ..\Resources\vocab.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 129 | 130 | 131 | ..\Resources\1872_Expression_F1142_fig18.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 132 | 133 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Build results 17 | [Dd]ebug/ 18 | [Dd]ebugPublic/ 19 | [Rr]elease/ 20 | [Rr]eleases/ 21 | x64/ 22 | x86/ 23 | bld/ 24 | [Bb]in/ 25 | [Oo]bj/ 26 | [Ll]og/ 27 | 28 | # Visual Studio 2015/2017 cache/options directory 29 | .vs/ 30 | # Uncomment if you have tasks that create the project's static files in wwwroot 31 | #wwwroot/ 32 | 33 | # Visual Studio 2017 auto generated files 34 | Generated\ Files/ 35 | 36 | # MSTest test Results 37 | [Tt]est[Rr]esult*/ 38 | [Bb]uild[Ll]og.* 39 | 40 | # NUNIT 41 | *.VisualState.xml 42 | TestResult.xml 43 | 44 | # Build Results of an ATL Project 45 | [Dd]ebugPS/ 46 | [Rr]eleasePS/ 47 | dlldata.c 48 | 49 | # Benchmark Results 50 | BenchmarkDotNet.Artifacts/ 51 | 52 | # .NET Core 53 | project.lock.json 54 | project.fragment.lock.json 55 | artifacts/ 56 | 57 | # StyleCop 58 | StyleCopReport.xml 59 | 60 | # Files built by Visual Studio 61 | *_i.c 62 | *_p.c 63 | *_h.h 64 | *.ilk 65 | *.meta 66 | *.obj 67 | *.iobj 68 | *.pch 69 | *.pdb 70 | *.ipdb 71 | *.pgc 72 | *.pgd 73 | *.rsp 74 | *.sbr 75 | *.tlb 76 | *.tli 77 | *.tlh 78 | *.tmp 79 | *.tmp_proj 80 | *_wpftmp.csproj 81 | *.log 82 | *.vspscc 83 | *.vssscc 84 | .builds 85 | *.pidb 86 | *.svclog 87 | *.scc 88 | 89 | # Chutzpah Test files 90 | _Chutzpah* 91 | 92 | # Visual C++ cache files 93 | ipch/ 94 | *.aps 95 | *.ncb 96 | *.opendb 97 | *.opensdf 98 | *.sdf 99 | *.cachefile 100 | *.VC.db 101 | *.VC.VC.opendb 102 | 103 | # Visual Studio profiler 104 | *.psess 105 | *.vsp 106 | *.vspx 107 | *.sap 108 | 109 | # Visual Studio Trace Files 110 | *.e2e 111 | 112 | # TFS 2012 Local Workspace 113 | $tf/ 114 | 115 | # Guidance Automation Toolkit 116 | *.gpState 117 | 118 | # ReSharper is a .NET coding add-in 119 | _ReSharper*/ 120 | *.[Rr]e[Ss]harper 121 | *.DotSettings.user 122 | 123 | # JustCode is a .NET coding add-in 124 | .JustCode 125 | 126 | # TeamCity is a build add-in 127 | _TeamCity* 128 | 129 | # DotCover is a Code Coverage Tool 130 | *.dotCover 131 | 132 | # AxoCover is a Code Coverage Tool 133 | .axoCover/* 134 | !.axoCover/settings.json 135 | 136 | # Visual Studio code coverage results 137 | *.coverage 138 | *.coveragexml 139 | 140 | # NCrunch 141 | _NCrunch_* 142 | .*crunch*.local.xml 143 | nCrunchTemp_* 144 | 145 | # MightyMoose 146 | *.mm.* 147 | AutoTest.Net/ 148 | 149 | # Web workbench (sass) 150 | .sass-cache/ 151 | 152 | # Installshield output folder 153 | [Ee]xpress/ 154 | 155 | # DocProject is a documentation generator add-in 156 | DocProject/buildhelp/ 157 | DocProject/Help/*.HxT 158 | DocProject/Help/*.HxC 159 | DocProject/Help/*.hhc 160 | DocProject/Help/*.hhk 161 | DocProject/Help/*.hhp 162 | DocProject/Help/Html2 163 | DocProject/Help/html 164 | 165 | # Click-Once directory 166 | publish/ 167 | 168 | # Publish Web Output 169 | *.[Pp]ublish.xml 170 | *.azurePubxml 171 | # Note: Comment the next line if you want to checkin your web deploy settings, 172 | # but database connection strings (with potential passwords) will be unencrypted 173 | *.pubxml 174 | *.publishproj 175 | 176 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 177 | # checkin your Azure Web App publish settings, but sensitive information contained 178 | # in these scripts will be unencrypted 179 | PublishScripts/ 180 | 181 | # NuGet Packages 182 | *.nupkg 183 | # The packages folder can be ignored because of Package Restore 184 | **/[Pp]ackages/* 185 | # except build/, which is used as an MSBuild target. 186 | !**/[Pp]ackages/build/ 187 | # Uncomment if necessary however generally it will be regenerated when needed 188 | #!**/[Pp]ackages/repositories.config 189 | # NuGet v3's project.json files produces more ignorable files 190 | *.nuget.props 191 | *.nuget.targets 192 | 193 | # Microsoft Azure Build Output 194 | csx/ 195 | *.build.csdef 196 | 197 | # Microsoft Azure Emulator 198 | ecf/ 199 | rcf/ 200 | 201 | # Windows Store app package directories and files 202 | AppPackages/ 203 | BundleArtifacts/ 204 | Package.StoreAssociation.xml 205 | _pkginfo.txt 206 | *.appx 207 | 208 | # Visual Studio cache files 209 | # files ending in .cache can be ignored 210 | *.[Cc]ache 211 | # but keep track of directories ending in .cache 212 | !*.[Cc]ache/ 213 | 214 | # Others 215 | ClientBin/ 216 | ~$* 217 | *~ 218 | *.dbmdl 219 | *.dbproj.schemaview 220 | *.jfm 221 | *.pfx 222 | *.publishsettings 223 | orleans.codegen.cs 224 | 225 | # Including strong name files can present a security risk 226 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 227 | #*.snk 228 | 229 | # Since there are multiple workflows, uncomment next line to ignore bower_components 230 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 231 | #bower_components/ 232 | 233 | # RIA/Silverlight projects 234 | Generated_Code/ 235 | 236 | # Backup & report files from converting an old project file 237 | # to a newer Visual Studio version. Backup files are not needed, 238 | # because we have git ;-) 239 | _UpgradeReport_Files/ 240 | Backup*/ 241 | UpgradeLog*.XML 242 | UpgradeLog*.htm 243 | ServiceFabricBackup/ 244 | *.rptproj.bak 245 | 246 | # SQL Server files 247 | *.mdf 248 | *.ldf 249 | *.ndf 250 | 251 | # Business Intelligence projects 252 | *.rdl.data 253 | *.bim.layout 254 | *.bim_*.settings 255 | *.rptproj.rsuser 256 | 257 | # Microsoft Fakes 258 | FakesAssemblies/ 259 | 260 | # GhostDoc plugin setting file 261 | *.GhostDoc.xml 262 | 263 | # Node.js Tools for Visual Studio 264 | .ntvs_analysis.dat 265 | node_modules/ 266 | 267 | # Visual Studio 6 build log 268 | *.plg 269 | 270 | # Visual Studio 6 workspace options file 271 | *.opt 272 | 273 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 274 | *.vbw 275 | 276 | # Visual Studio LightSwitch build output 277 | **/*.HTMLClient/GeneratedArtifacts 278 | **/*.DesktopClient/GeneratedArtifacts 279 | **/*.DesktopClient/ModelManifest.xml 280 | **/*.Server/GeneratedArtifacts 281 | **/*.Server/ModelManifest.xml 282 | _Pvt_Extensions 283 | 284 | # Paket dependency manager 285 | .paket/paket.exe 286 | paket-files/ 287 | 288 | # FAKE - F# Make 289 | .fake/ 290 | 291 | # JetBrains Rider 292 | .idea/ 293 | *.sln.iml 294 | 295 | # CodeRush personal settings 296 | .cr/personal 297 | 298 | # Python Tools for Visual Studio (PTVS) 299 | __pycache__/ 300 | *.pyc 301 | 302 | # Cake - Uncomment if you are using it 303 | # tools/** 304 | # !tools/packages.config 305 | 306 | # Tabs Studio 307 | *.tss 308 | 309 | # Telerik's JustMock configuration file 310 | *.jmconfig 311 | 312 | # BizTalk build output 313 | *.btp.cs 314 | *.btm.cs 315 | *.odx.cs 316 | *.xsd.cs 317 | 318 | # OpenCover UI analysis results 319 | OpenCover/ 320 | 321 | # Azure Stream Analytics local run output 322 | ASALocalRun/ 323 | 324 | # MSBuild Binary and Structured Log 325 | *.binlog 326 | 327 | # NVidia Nsight GPU debugger configuration file 328 | *.nvuser 329 | 330 | # MFractors (Xamarin productivity tool) working folder 331 | .mfractor/ 332 | 333 | # Local History for Visual Studio 334 | .localhistory/ 335 | 336 | # Dictionaries Folder 337 | VocabulateInstaller/ -------------------------------------------------------------------------------- /VocabulateSrc/LoadDictionary.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text.RegularExpressions; 5 | using System.IO; 6 | using System.Windows.Forms; 7 | 8 | 9 | 10 | namespace Vocabulate 11 | { 12 | class LoadDictionary 13 | { 14 | 15 | public DictionaryData LoadDictionaryFile(DictionaryData DictData, string InputFile, System.Text.Encoding SelectedEncoding, char CSVDelimiter, char CSVQuote) 16 | { 17 | 18 | 19 | //parse out the the dictionary file 20 | DictData.MaxWords = 0; 21 | 22 | //yeah, there's levels to this thing 23 | DictData.FullDictionaryMap = new Dictionary>>(); 24 | 25 | DictData.FullDictionaryMap.Add("Wildcards", new Dictionary>()); 26 | DictData.FullDictionaryMap.Add("Standards", new Dictionary>()); 27 | 28 | DictData.WildCardArrays = new Dictionary(); 29 | DictData.PrecompiledWildcards = new Dictionary(); 30 | 31 | 32 | Dictionary> WildCardLists = new Dictionary>(); 33 | 34 | DictData.ConceptMap = new Dictionary(); 35 | 36 | 37 | 38 | 39 | 40 | 41 | using (var stream = File.OpenRead(InputFile)) 42 | using (var reader = new StreamReader(stream, encoding: SelectedEncoding)) 43 | { 44 | var data = Votabulate.CsvParser.ParseHeadAndTail(reader, CSVDelimiter, CSVQuote); 45 | 46 | var header = data.Item1; 47 | var lines = data.Item2; 48 | 49 | 50 | 51 | // ____ _ _ ____ _ _ ____ _ ___ _ _ _ 52 | // | _ \ ___ _ __ _ _| | __ _| |_ ___ | _ \(_) ___| |_| _ \ __ _| |_ __ _ / _ \| |__ (_) ___ ___| |_ 53 | // | |_) / _ \| '_ \| | | | |/ _` | __/ _ \ | | | | |/ __| __| | | |/ _` | __/ _` | | | | | '_ \| |/ _ \/ __| __| 54 | // | __/ (_) | |_) | |_| | | (_| | || __/ | |_| | | (__| |_| |_| | (_| | || (_| | | |_| | |_) | | __/ (__| |_ 55 | // |_| \___/| .__/ \__,_|_|\__,_|\__\___| |____/|_|\___|\__|____/ \__,_|\__\__,_| \___/|_.__// |\___|\___|\__| 56 | // |_| |__/ 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | DictData.NumCats = header.Count - 1; 66 | 67 | //now that we know the number of categories, we can fill out the arrays 68 | DictData.CatNames = new string[DictData.NumCats]; 69 | //DictData.CatValues = new string[DictData.NumCats]; 70 | 71 | DictData.CategoryOrder = new Dictionary(); 72 | //Map Out the Categories 73 | for (int i = 1; i < DictData.NumCats + 1; i++) 74 | { 75 | DictData.CatNames[i-1] = header[i]; 76 | DictData.CategoryOrder.Add(i-1, header[i]); 77 | } 78 | 79 | 80 | foreach (var lineobject in lines) 81 | { 82 | string[] line = (string[])lineobject.ToArray(); 83 | 84 | string[] WordsInLine = line[0].Trim().Split('|'); 85 | 86 | string Concept = WordsInLine[0]; 87 | 88 | //set the new item into our conceptmap dictionary 89 | string[] CategoriesArray = line.Skip(1).Take(line.Length - 1).ToArray(); 90 | 91 | 92 | DictData.ConceptMap.Add(WordsInLine[0], new string[] { }); 93 | 94 | //fill out the list of concepts associated with each word 95 | for (int i = 0; i < CategoriesArray.Length; i++) 96 | { 97 | 98 | if (!String.IsNullOrWhiteSpace(CategoriesArray[i].Trim())) 99 | { 100 | var obj = DictData.ConceptMap[Concept]; 101 | Array.Resize(ref obj, obj.Length + 1); 102 | DictData.ConceptMap[Concept] = obj; 103 | DictData.ConceptMap[Concept][obj.Length - 1] = DictData.CatNames[i]; 104 | } 105 | } 106 | 107 | //now we add the actual entries for each word in the row into our FullDictionary 108 | foreach (string WordToCode in WordsInLine) 109 | { 110 | string WordToCodeTrimmed = WordToCode.Trim(); 111 | 112 | int Words_In_Entry = WordToCodeTrimmed.Split(' ').Length; 113 | if (Words_In_Entry > DictData.MaxWords) DictData.MaxWords = Words_In_Entry; 114 | 115 | 116 | if (WordToCodeTrimmed.Contains("*")) 117 | { 118 | 119 | if (DictData.FullDictionaryMap["Wildcards"].ContainsKey(Words_In_Entry)) 120 | { 121 | DictData.FullDictionaryMap["Wildcards"][Words_In_Entry].Add(WordToCodeTrimmed.ToLower(), Concept); 122 | WildCardLists[Words_In_Entry].Add(WordToCodeTrimmed); 123 | } 124 | else 125 | { 126 | DictData.FullDictionaryMap["Wildcards"].Add(Words_In_Entry, new Dictionary { { WordToCodeTrimmed.ToLower(), Concept } }); 127 | WildCardLists.Add(Words_In_Entry, new List()); 128 | WildCardLists[Words_In_Entry].Add(WordToCodeTrimmed); 129 | 130 | } 131 | 132 | 133 | DictData.PrecompiledWildcards.Add(WordToCodeTrimmed.ToLower(), new Regex("^" + Regex.Escape(WordToCodeTrimmed.ToLower()).Replace("\\*", ".*"), RegexOptions.Compiled)); 134 | 135 | } 136 | else 137 | { 138 | if (DictData.FullDictionaryMap["Standards"].ContainsKey(Words_In_Entry)) 139 | { 140 | DictData.FullDictionaryMap["Standards"][Words_In_Entry].Add(WordToCodeTrimmed.ToLower(), Concept); 141 | } 142 | else 143 | { 144 | DictData.FullDictionaryMap["Standards"].Add(Words_In_Entry, new Dictionary { { WordToCodeTrimmed.ToLower(), Concept } }); 145 | } 146 | 147 | } 148 | 149 | } 150 | 151 | 152 | } 153 | 154 | for (int i = DictData.MaxWords; i > 0; i--) 155 | { 156 | if (WildCardLists.ContainsKey(i)) DictData.WildCardArrays.Add(i, WildCardLists[i].ToArray()); 157 | } 158 | WildCardLists.Clear(); 159 | DictData.DictionaryLoaded = true; 160 | 161 | 162 | } 163 | 164 | 165 | return DictData; 166 | 167 | 168 | } 169 | 170 | 171 | } 172 | } 173 | -------------------------------------------------------------------------------- /VocabulateSrc/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace Vocabulate.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Vocabulate.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// Looks up a localized resource of type System.Drawing.Bitmap. 65 | /// 66 | internal static System.Drawing.Bitmap _1872_Expression_F1142_fig18 { 67 | get { 68 | object obj = ResourceManager.GetObject("_1872_Expression_F1142_fig18", resourceCulture); 69 | return ((System.Drawing.Bitmap)(obj)); 70 | } 71 | } 72 | 73 | /// 74 | /// Looks up a localized string similar to ` 75 | ///~ 76 | ///! 77 | ///@ 78 | ///# 79 | ///$ 80 | ///% 81 | ///^ 82 | ///& 83 | ///* 84 | ///( 85 | ///) 86 | ///_ 87 | ///+ 88 | ///- 89 | ///= 90 | ///[ 91 | ///] 92 | ///\ 93 | ///; 94 | ///' 95 | ///, 96 | ///. 97 | //// 98 | ///{ 99 | ///} 100 | ///| 101 | ///: 102 | ///" 103 | ///< 104 | ///> 105 | ///? 106 | ///.. 107 | ///... 108 | ///« 109 | ///«« 110 | ///»» 111 | ///“ 112 | ///” 113 | ///‘ 114 | ///‘‘ 115 | ///’ 116 | ///’’ 117 | ///1 118 | ///2 119 | ///3 120 | ///4 121 | ///5 122 | ///6 123 | ///7 124 | ///8 125 | ///9 126 | ///0 127 | ///10 128 | ///11 129 | ///12 130 | ///13 131 | ///14 132 | ///15 133 | ///16 134 | ///17 135 | ///18 136 | ///19 137 | ///20 138 | ///25 139 | ///30 140 | ///33 141 | ///40 142 | ///50 143 | ///60 144 | ///66 145 | ///70 146 | ///75 147 | ///80 148 | ///90 149 | ///99 150 | ///100 151 | ///123 152 | ///1000 153 | ///10000 154 | ///12345 155 | ///100000 156 | ///1000000. 157 | /// 158 | internal static string StopListCharacters { 159 | get { 160 | return ResourceManager.GetString("StopListCharacters", resourceCulture); 161 | } 162 | } 163 | 164 | /// 165 | /// Looks up a localized string similar to a 166 | ///about 167 | ///above 168 | ///absolutely 169 | ///across 170 | ///actually 171 | ///after 172 | ///again 173 | ///against 174 | ///ahead 175 | ///aint 176 | ///ain't 177 | ///all 178 | ///allot 179 | ///along 180 | ///alot 181 | ///also 182 | ///although 183 | ///am 184 | ///among 185 | ///amongst 186 | ///an 187 | ///and 188 | ///another 189 | ///any 190 | ///anybodies 191 | ///anybody 192 | ///anybody's 193 | ///anymore 194 | ///anyone 195 | ///anyone's 196 | ///anything 197 | ///anyway 198 | ///anyways 199 | ///anywhere 200 | ///apparently 201 | ///are 202 | ///arent 203 | ///aren't 204 | ///around 205 | ///as 206 | ///at 207 | ///atho 208 | ///atop 209 | ///away 210 | ///back 211 | ///basically 212 | ///be 213 | ///became 214 | ///because 215 | ///become 216 | ///becomes 217 | ///becoming 218 | ///been 219 | ///before 220 | ///behind 221 | ///being 222 | ///below 223 | ///beneath 224 | ///beside 225 | ///besides 226 | ///best 227 | ///between 228 | ///beyond 229 | ///billion 230 | ///billions 231 | ///billiont [rest of string was truncated]";. 232 | /// 233 | internal static string StopListEN { 234 | get { 235 | return ResourceManager.GetString("StopListEN", resourceCulture); 236 | } 237 | } 238 | 239 | /// 240 | /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). 241 | /// 242 | internal static System.Drawing.Icon vocab { 243 | get { 244 | object obj = ResourceManager.GetObject("vocab", resourceCulture); 245 | return ((System.Drawing.Icon)(obj)); 246 | } 247 | } 248 | } 249 | } 250 | -------------------------------------------------------------------------------- /VocabulateSrc/Resources/StopListEN.txt: -------------------------------------------------------------------------------- 1 | a 2 | about 3 | above 4 | absolutely 5 | across 6 | actually 7 | after 8 | again 9 | against 10 | ahead 11 | aint 12 | ain't 13 | all 14 | allot 15 | along 16 | alot 17 | also 18 | although 19 | am 20 | among 21 | amongst 22 | an 23 | and 24 | another 25 | any 26 | anybodies 27 | anybody 28 | anybody's 29 | anymore 30 | anyone 31 | anyone's 32 | anything 33 | anyway 34 | anyways 35 | anywhere 36 | apparently 37 | are 38 | arent 39 | aren't 40 | around 41 | as 42 | at 43 | atho 44 | atop 45 | away 46 | back 47 | basically 48 | be 49 | became 50 | because 51 | become 52 | becomes 53 | becoming 54 | been 55 | before 56 | behind 57 | being 58 | below 59 | beneath 60 | beside 61 | besides 62 | best 63 | between 64 | beyond 65 | billion 66 | billions 67 | billionth 68 | billionths 69 | both 70 | bunch 71 | but 72 | by 73 | can 74 | cannot 75 | cant 76 | can't 77 | cetera 78 | clearly 79 | completely 80 | constantly 81 | could 82 | couldnt 83 | couldn't 84 | couldve 85 | could've 86 | couple 87 | cuz 88 | definitely 89 | despite 90 | did 91 | didnt 92 | didn't 93 | difference 94 | differences 95 | do 96 | does 97 | doesnt 98 | doesn't 99 | doing 100 | done 101 | dont 102 | don't 103 | double 104 | doubled 105 | doubles 106 | doubling 107 | doubly 108 | down 109 | dozen 110 | dozens 111 | dozenth 112 | during 113 | each 114 | eight 115 | eighteen 116 | eighteenfold 117 | eighteens 118 | eighteenth 119 | eighteenths 120 | eightfold 121 | eighth 122 | eighthly 123 | eighths 124 | eighties 125 | eightieth 126 | eightieths 127 | eights 128 | eighty 129 | eightyeight 130 | eightyfold 131 | eightysix 132 | either 133 | eleven 134 | else 135 | enough 136 | entire 137 | entirely 138 | entireness 139 | entireties 140 | entirety 141 | equal 142 | equaled 143 | equaling 144 | equally 145 | equals 146 | especially 147 | etc 148 | even 149 | eventually 150 | ever 151 | every 152 | everybody 153 | everybody's 154 | everyone 155 | everyone's 156 | everything 157 | everything's 158 | except 159 | extent 160 | extra 161 | extremely 162 | fairly 163 | few 164 | fewer 165 | fewest 166 | fewness 167 | fifteen 168 | fifteenfold 169 | fifteens 170 | fifteenth 171 | fifteenths 172 | fifth 173 | fifthly 174 | fifths 175 | fifties 176 | fiftieth 177 | fiftieths 178 | fifty 179 | fiftyfold 180 | fiftyfour 181 | fiftyish 182 | fiftyone 183 | first 184 | firstly 185 | firsts 186 | five 187 | for 188 | form 189 | four 190 | fours 191 | fourscore 192 | fourscorth 193 | foursomes 194 | fourteen 195 | fourteenfold 196 | fourteens 197 | fourteenth 198 | fourteenths 199 | fourth 200 | fourthly 201 | fourths 202 | fourtyfour 203 | fourty-four 204 | frequently 205 | from 206 | full 207 | fullblown 208 | fuller 209 | fullest 210 | fullness 211 | fully 212 | generally 213 | greater 214 | greatest 215 | had 216 | hadnt 217 | hadn't 218 | half 219 | has 220 | hasnt 221 | hasn't 222 | have 223 | havent 224 | haven't 225 | having 226 | he 227 | hed 228 | he'd 229 | her 230 | here 231 | heres 232 | here's 233 | hers 234 | herself 235 | hes 236 | he's 237 | highly 238 | him 239 | himself 240 | his 241 | hopefully 242 | how 243 | however 244 | hundred 245 | hundredfold 246 | hundreds 247 | hundredth 248 | hundredths 249 | i 250 | id 251 | i'd 252 | if 253 | i'll 254 | im 255 | i'm 256 | i'm 257 | immediately 258 | in 259 | infinite 260 | infinitely 261 | infiniteness 262 | infinitesimal 263 | infinitesimally 264 | infinitesimals 265 | infinities 266 | infinitival 267 | infinitive 268 | infinitives 269 | infinitude 270 | infinity 271 | inside 272 | insides 273 | instead 274 | into 275 | is 276 | isnt 277 | isn't 278 | it 279 | itd 280 | it'd 281 | item 282 | items 283 | itemset 284 | itemsets 285 | itll 286 | it'll 287 | its 288 | it's 289 | itself 290 | ive 291 | i've 292 | i've 293 | just 294 | lack 295 | lacked 296 | lacking 297 | lacks 298 | lately 299 | least 300 | less 301 | let 302 | lets 303 | let's 304 | loads 305 | lot 306 | lotof 307 | lots 308 | lotsa 309 | lotta 310 | main 311 | majority 312 | many 313 | may 314 | maybe 315 | me 316 | might 317 | mightve 318 | might've 319 | millionfold 320 | millions 321 | millionth 322 | millionths 323 | mine 324 | more 325 | most 326 | mostly 327 | much 328 | mucho 329 | must 330 | mustnt 331 | mustn't 332 | must'nt 333 | mustve 334 | must've 335 | my 336 | myself 337 | near 338 | nearly 339 | neednt 340 | needn't 341 | need'nt 342 | negate 343 | negated 344 | negates 345 | negating 346 | negative 347 | negativeness 348 | negatory 349 | neither 350 | never 351 | nine 352 | ninefold 353 | nines 354 | nineteen 355 | nineteenfold 356 | nineteens 357 | nineteenth 358 | nineteenthly 359 | nineteenths 360 | nineties 361 | ninetieth 362 | ninetieths 363 | ninety 364 | ninetyfold 365 | ninetyish 366 | ninetysix 367 | no 368 | nobodies 369 | nobody 370 | nobody's 371 | none 372 | nope 373 | nor 374 | not 375 | nothing 376 | now 377 | nowhere 378 | of 379 | off 380 | often 381 | on 382 | once 383 | one 384 | ones 385 | oneself 386 | only 387 | onto 388 | or 389 | other 390 | others 391 | otherwise 392 | ought 393 | oughta 394 | oughtnt 395 | oughtn't 396 | ought'nt 397 | oughtve 398 | ought've 399 | our 400 | ours 401 | ourselves 402 | out 403 | outside 404 | over 405 | own 406 | part 407 | partly 408 | perhaps 409 | piece 410 | pieced 411 | pieces 412 | piecing 413 | plenty 414 | plus 415 | primarily 416 | probably 417 | quarter 418 | quartered 419 | quartering 420 | quarters 421 | quick 422 | quicken 423 | quickened 424 | quickening 425 | quickenings 426 | quickens 427 | quicker 428 | quickest 429 | quicklier 430 | quickliest 431 | quickly 432 | quickness 433 | rarely 434 | rather 435 | really 436 | remaining 437 | rest 438 | same 439 | second 440 | section 441 | seriously 442 | seven 443 | sevenfold 444 | sevenfolded 445 | sevens 446 | seventeen 447 | seventeenfold 448 | seventeens 449 | seventeenth 450 | seventeenths 451 | seventh 452 | sevenths 453 | seventies 454 | seventieth 455 | seventieths 456 | seventy 457 | seventyeight 458 | seventyfifth 459 | seventyfive 460 | seventyfold 461 | seventyfour 462 | seventynine 463 | seventyone 464 | seventyseven 465 | seventysix 466 | seventythree 467 | seventytwo 468 | several 469 | shall 470 | shant 471 | shan't 472 | she 473 | she'd 474 | she'll 475 | shes 476 | she's 477 | should 478 | shouldnt 479 | shouldn't 480 | should'nt 481 | shouldve 482 | should've 483 | simply 484 | since 485 | single 486 | singled 487 | singleness 488 | singles 489 | singly 490 | six 491 | sixes 492 | sixfold 493 | sixteen 494 | sixteenfold 495 | sixteens 496 | sixteenth 497 | sixteenths 498 | sixth 499 | sixthly 500 | sixths 501 | sixties 502 | sixtieth 503 | sixtieths 504 | sixty 505 | sixtyeight 506 | sixtyeighth 507 | sixtyfifth 508 | sixtyfirst 509 | sixtyfive 510 | sixtyfold 511 | sixtyfour 512 | sixtyfourth 513 | sixtyish 514 | sixtyninth 515 | sixtyone 516 | sixtysecond 517 | sixtyseven 518 | sixtyseventh 519 | sixtysix 520 | sixtysixth 521 | sixtythird 522 | sixtythree 523 | sixtytwo 524 | so 525 | some 526 | somebodies 527 | somebody 528 | somebody's 529 | somehow 530 | someone 531 | someones 532 | someone's 533 | something 534 | somethings 535 | something's 536 | somewhat 537 | somewhere 538 | soon 539 | still 540 | stuff 541 | such 542 | ten 543 | tenth 544 | than 545 | that 546 | thatd 547 | that'd 548 | thatll 549 | that'll 550 | thats 551 | that's 552 | the 553 | thee 554 | their 555 | theirs 556 | them 557 | themselves 558 | then 559 | there 560 | theres 561 | there's 562 | these 563 | they 564 | theyd 565 | they'd 566 | theyll 567 | they'll 568 | theyre 569 | they're 570 | theyve 571 | they've 572 | thine 573 | thing 574 | thingamabob 575 | thingamabobs 576 | thingamajig 577 | thingamajigs 578 | things 579 | thingumabob 580 | thingumabobs 581 | thingumajig 582 | thingumajigs 583 | thingummies 584 | thingummy 585 | thingy 586 | third 587 | thirteen 588 | thirteenfold 589 | thirteens 590 | thirteenth 591 | thirteenthly 592 | thirteenths 593 | thirties 594 | thirtieth 595 | thirtieths 596 | thirty 597 | thirtyfive 598 | thirtyfold 599 | thirtyish 600 | thirtynine 601 | thirtysomething 602 | thirtythree 603 | this 604 | tho 605 | those 606 | thou 607 | though 608 | thousand 609 | thousandfold 610 | thousands 611 | thousand's 612 | thousandth 613 | thousandths 614 | thoust 615 | three 616 | through 617 | throughly 618 | throughs 619 | thru 620 | thy 621 | til 622 | till 623 | to 624 | ton 625 | tons 626 | too 627 | total 628 | totally 629 | toward 630 | towards 631 | trillion 632 | trillionaire 633 | trillionaires 634 | trillions 635 | trillionth 636 | trillionths 637 | triple 638 | tripled 639 | triples 640 | triplet 641 | triplets 642 | triplicate 643 | triplicated 644 | triplicates 645 | triplicating 646 | triplication 647 | triplications 648 | tripling 649 | triply 650 | truly 651 | twelfth 652 | twelfthly 653 | twelfths 654 | twelve 655 | twelvefold 656 | twelves 657 | twenties 658 | twentieth 659 | twentieths 660 | twenty 661 | twentyeight 662 | twentyfifth 663 | twentyfirst 664 | twentyfive 665 | twentyfives 666 | twentyfold 667 | twentyfour 668 | twentyfourth 669 | twentyone 670 | twentysecond 671 | twentysomething 672 | twentysomethings 673 | twentythird 674 | twentythree 675 | twentytwo 676 | twentytwos 677 | twice 678 | two 679 | uhuh 680 | under 681 | underneath 682 | unique 683 | unless 684 | until 685 | unto 686 | up 687 | upon 688 | us 689 | usually 690 | various 691 | very 692 | wanna 693 | was 694 | wasnt 695 | wasn't 696 | we 697 | we'd 698 | well 699 | we'll 700 | were 701 | we're 702 | weren't 703 | weve 704 | we've 705 | what 706 | whatever 707 | whats 708 | what's 709 | when 710 | whenever 711 | where 712 | whereas 713 | wheres 714 | where's 715 | whether 716 | which 717 | whichever 718 | while 719 | who 720 | whod 721 | who'd 722 | whole 723 | wholl 724 | who'll 725 | whom 726 | whose 727 | will 728 | with 729 | within 730 | without 731 | wont 732 | won't 733 | worst 734 | would 735 | wouldnt 736 | wouldn't 737 | wouldve 738 | would've 739 | x 740 | ya 741 | yall 742 | y'all 743 | ye 744 | yet 745 | you 746 | youd 747 | you'd 748 | youll 749 | you'll 750 | your 751 | youre 752 | you're 753 | yours 754 | youve 755 | you've 756 | zero 757 | zillion 758 | zillions 759 | zillionth 760 | zillionths -------------------------------------------------------------------------------- /VocabulateSrc/CSVParser.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using System.IO; 5 | 6 | namespace Votabulate 7 | { 8 | 9 | 10 | // https://www.codeproject.com/Tips/823670/Csharp-Light-and-Fast-CSV-Parser 11 | // This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL) 12 | // Copyright 2014 Yuriy Magurdumov 13 | 14 | // Preamble 15 | // This License governs Your use of the Work.This License is intended to allow developers to use the Source Code and Executable Files provided as part of the Work in any application in any form. 16 | 17 | 18 | // The main points subject to the terms of the License are: 19 | 20 | 21 | // Source Code and Executable Files can be used in commercial applications; 22 | // Source Code and Executable Files can be redistributed; and 23 | // Source Code can be modified to create derivative works. 24 | // No claim of suitability, guarantee, or any warranty whatsoever is provided.The software is provided "as-is". 25 | //The Article(s) accompanying the Work may not be distributed or republished without the Author's consent 26 | //This License is entered between You, the individual or other entity reading or otherwise making use of the Work licensed pursuant to this License and the individual or other entity which offers the Work under the terms of this License ("Author"). 27 | 28 | //License 29 | //THE WORK(AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CODE PROJECT OPEN LICENSE("LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW.ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. 30 | 31 | 32 | //BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HEREIN, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE.THE AUTHOR GRANTS YOU THE RIGHTS CONTAINED HEREIN IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. IF YOU DO NOT AGREE TO ACCEPT AND BE BOUND BY THE TERMS OF THIS LICENSE, YOU CANNOT MAKE ANY USE OF THE WORK. 33 | 34 | 35 | //Definitions. 36 | //"Articles" means, collectively, all articles written by Author which describes how the Source Code and Executable Files for the Work may be used by a user. 37 | //"Author" means the individual or entity that offers the Work under the terms of this License. 38 | //"Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works. 39 | //"Executable Files" refer to the executables, binary files, configuration and any required data files included in the Work. 40 | //"Publisher" means the provider of the website, magazine, CD-ROM, DVD or other medium from or by which the Work is obtained by You. 41 | //"Source Code" refers to the collection of source code and configuration files used to create the Executable Files. 42 | //"Standard Version" refers to such a Work if it has not been modified, or has been modified in accordance with the consent of the Author, such consent being in the full discretion of the Author. 43 | //"Work" refers to the collection of files distributed by the Publisher, including the Source Code, Executable Files, binaries, data files, documentation, whitepapers and the Articles. 44 | //"You" is you, an individual or entity wishing to use the Work and exercise your rights under this License. 45 | //Fair Use/Fair Use Rights.Nothing in this License is intended to reduce, limit, or restrict any rights arising from fair use, fair dealing, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws. 46 | //License Grant. Subject to the terms and conditions of this License, the Author hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: 47 | //You may use the standard version of the Source Code or Executable Files in Your own applications. 48 | //You may apply bug fixes, portability fixes and other modifications obtained from the Public Domain or from the Author.A Work modified in such a way shall still be considered the standard version and will be subject to this License. 49 | //You may otherwise modify Your copy of this Work (excluding the Articles) in any way to create a Derivative Work, provided that You insert a prominent notice in each changed file stating how, when and where You changed that file. 50 | //You may distribute the standard version of the Executable Files and Source Code or Derivative Work in aggregate with other(possibly commercial) programs as part of a larger(possibly commercial) software distribution. 51 | //The Articles discussing the Work published in any form by the author may not be distributed or republished without the Author's consent. The author retains copyright to any such Articles. You may use the Executable Files and Source Code pursuant to this License but you may not repost or republish or otherwise distribute or make available the Articles, without the prior written consent of the Author. 52 | //Any subroutines or modules supplied by You and linked into the Source Code or Executable Files of this Work shall not be considered part of this Work and will not be subject to the terms of this License. 53 | //Patent License. Subject to the terms and conditions of this License, each Author hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, import, and otherwise transfer the Work. 54 | //Restrictions.The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: 55 | //You agree not to remove any of the original copyright, patent, trademark, and attribution notices and associated disclaimers that may appear in the Source Code or Executable Files. 56 | //You agree not to advertise or in any way imply that this Work is a product of Your own. 57 | //The name of the Author may not be used to endorse or promote products derived from the Work without the prior written consent of the Author. 58 | //You agree not to sell, lease, or rent any part of the Work.This does not restrict you from including the Work or any part of the Work inside a larger software distribution that itself is being sold. The Work by itself, though, cannot be sold, leased or rented. 59 | //You may distribute the Executable Files and Source Code only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy of the Executable Files or Source Code You distribute and ensure that anyone receiving such Executable Files and Source Code agrees that the terms of this License apply to such Executable Files and/or Source Code.You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute the Executable Files or Source Code with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License. 60 | //You agree not to use the Work for illegal, immoral or improper purposes, or on pages containing illegal, immoral or improper material. The Work is subject to applicable export laws.You agree to comply with all such laws and regulations that may apply to the Work after Your receipt of the Work. 61 | //Representations, Warranties and Disclaimer.THIS WORK IS PROVIDED "AS IS", "WHERE IS" AND "AS AVAILABLE", WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OR CONDITIONS OR GUARANTEES. YOU, THE USER, ASSUME ALL RISK IN ITS USE, INCLUDING COPYRIGHT INFRINGEMENT, PATENT INFRINGEMENT, SUITABILITY, ETC.AUTHOR EXPRESSLY DISCLAIMS ALL EXPRESS, IMPLIED OR STATUTORY WARRANTIES OR CONDITIONS, INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF MERCHANTABILITY, MERCHANTABLE QUALITY OR FITNESS FOR A PARTICULAR PURPOSE, OR ANY WARRANTY OF TITLE OR NON-INFRINGEMENT, OR THAT THE WORK (OR ANY PORTION THEREOF) IS CORRECT, USEFUL, BUG-FREE OR FREE OF VIRUSES.YOU MUST PASS THIS DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE WORK OR DERIVATIVE WORKS. 62 | //Indemnity.You agree to defend, indemnify and hold harmless the Author and the Publisher from and against any claims, suits, losses, damages, liabilities, costs, and expenses (including reasonable legal or attorneys’ fees) resulting from or relating to any use of the Work by You. 63 | //Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL THE AUTHOR OR THE PUBLISHER BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK OR OTHERWISE, EVEN IF THE AUTHOR OR THE PUBLISHER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 64 | //Termination. 65 | //This License and the rights granted hereunder will terminate automatically upon any breach by You of any term of this License.Individuals or entities who have received Derivative Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses.Sections 1, 2, 6, 7, 8, 9, 10 and 11 will survive any termination of this License. 66 | //If You bring a copyright, trademark, patent or any other infringement claim against any contributor over infringements You claim are made by the Work, your License from such contributor to the Work ends automatically. 67 | //Subject to the above terms and conditions, this License is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, the Author reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. 68 | //Publisher. The parties hereby confirm that the Publisher shall not, under any circumstances, be responsible for and shall not have any liability in respect of the subject matter of this License. The Publisher makes no warranty whatsoever in connection with the Work and shall not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. The Publisher reserves the right to cease making the Work available to You at any time without notice 69 | //Miscellaneous 70 | //This License shall be governed by the laws of the location of the head office of the Author or if the Author is an individual, the laws of location of the principal place of residence of the Author. 71 | //If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this License, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. 72 | //No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. 73 | //This License constitutes the entire agreement between the parties with respect to the Work licensed herein. There are no understandings, agreements or representations with respect to the Work not specified herein. The Author shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Author and You. 74 | 75 | 76 | public static class CsvParser 77 | { 78 | private static Tuple> HeadAndTail(this IEnumerable source) 79 | { 80 | if (source == null) 81 | throw new ArgumentNullException("source"); 82 | var en = source.GetEnumerator(); 83 | en.MoveNext(); 84 | return Tuple.Create(en.Current, EnumerateTail(en)); 85 | } 86 | 87 | private static IEnumerable EnumerateTail(IEnumerator en) 88 | { 89 | while (en.MoveNext()) yield return en.Current; 90 | } 91 | 92 | public static IEnumerable> Parse(string content, char delimiter, char qualifier) 93 | { 94 | using (var reader = new StringReader(content)) 95 | return Parse(reader, delimiter, qualifier); 96 | } 97 | 98 | public static Tuple, IEnumerable>> ParseHeadAndTail(TextReader reader, char delimiter, char qualifier) 99 | { 100 | return HeadAndTail(Parse(reader, delimiter, qualifier)); 101 | } 102 | 103 | public static IEnumerable> Parse(TextReader reader, char delimiter, char qualifier) 104 | { 105 | var inQuote = false; 106 | var record = new List(); 107 | var sb = new StringBuilder(); 108 | 109 | while (reader.Peek() != -1) 110 | { 111 | var readChar = (char)reader.Read(); 112 | 113 | if (readChar == '\n' || (readChar == '\r' && (char)reader.Peek() == '\n')) 114 | { 115 | // If it's a \r\n combo consume the \n part and throw it away. 116 | if (readChar == '\r') 117 | reader.Read(); 118 | 119 | if (inQuote) 120 | { 121 | if (readChar == '\r') 122 | sb.Append('\r'); 123 | sb.Append('\n'); 124 | } 125 | else 126 | { 127 | if (record.Count > 0 || sb.Length > 0) 128 | { 129 | record.Add(sb.ToString()); 130 | sb.Clear(); 131 | } 132 | 133 | if (record.Count > 0) 134 | yield return record; 135 | 136 | record = new List(record.Count); 137 | } 138 | } 139 | else if (sb.Length == 0 && !inQuote) 140 | { 141 | if (readChar == qualifier) 142 | inQuote = true; 143 | else if (readChar == delimiter) 144 | { 145 | record.Add(sb.ToString()); 146 | sb.Clear(); 147 | } 148 | else if (char.IsWhiteSpace(readChar)) 149 | { 150 | // Ignore leading whitespace 151 | } 152 | else 153 | sb.Append(readChar); 154 | } 155 | else if (readChar == delimiter) 156 | { 157 | if (inQuote) 158 | sb.Append(delimiter); 159 | else 160 | { 161 | record.Add(sb.ToString()); 162 | sb.Clear(); 163 | } 164 | } 165 | else if (readChar == qualifier) 166 | { 167 | if (inQuote) 168 | { 169 | if ((char)reader.Peek() == qualifier) 170 | { 171 | reader.Read(); 172 | sb.Append(qualifier); 173 | } 174 | else 175 | inQuote = false; 176 | } 177 | else 178 | sb.Append(readChar); 179 | } 180 | else 181 | sb.Append(readChar); 182 | } 183 | 184 | if (record.Count > 0 || sb.Length > 0) 185 | record.Add(sb.ToString()); 186 | 187 | if (record.Count > 0) 188 | yield return record; 189 | } 190 | } 191 | 192 | 193 | //Using the Code 194 | //Here is an example of reading CSV file.The following code snippet parses out the first 5 records and prints them out to the Console in form of key/value pairs: 195 | 196 | //Hide Copy Code 197 | //const string fileName = @"C:\Temp\file.csv"; 198 | //using (var stream = File.OpenRead(fileName)) 199 | //using (var reader = new StreamReader(stream)) 200 | //{ 201 | // var data = CsvParser.ParseHeadAndTail(reader, ',', '"'); 202 | 203 | // var header = data.Item1; 204 | // var lines = data.Item2; 205 | 206 | // foreach (var line in lines.Take(5)) 207 | // { 208 | // for (var i = 0; i 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(VocabulateMainForm)); 32 | this.BgWorker = new System.ComponentModel.BackgroundWorker(); 33 | this.ScanSubfolderCheckbox = new System.Windows.Forms.CheckBox(); 34 | this.StartButton = new System.Windows.Forms.Button(); 35 | this.FolderBrowser = new System.Windows.Forms.FolderBrowserDialog(); 36 | this.FilenameLabel = new System.Windows.Forms.Label(); 37 | this.saveFileDialog = new System.Windows.Forms.SaveFileDialog(); 38 | this.EncodingDropdown = new System.Windows.Forms.ComboBox(); 39 | this.label4 = new System.Windows.Forms.Label(); 40 | this.RawWCCheckbox = new System.Windows.Forms.CheckBox(); 41 | this.openFileDialog = new System.Windows.Forms.OpenFileDialog(); 42 | this.LoadDictionaryButton = new System.Windows.Forms.Button(); 43 | this.StopListLabel = new System.Windows.Forms.Label(); 44 | this.StopListTextBox = new System.Windows.Forms.TextBox(); 45 | this.CSVQuoteTextbox = new System.Windows.Forms.TextBox(); 46 | this.CSVDelimiterTextbox = new System.Windows.Forms.TextBox(); 47 | this.label42 = new System.Windows.Forms.Label(); 48 | this.label41 = new System.Windows.Forms.Label(); 49 | this.DictStructureTextBox = new System.Windows.Forms.TextBox(); 50 | this.DictionaryStructureLabel = new System.Windows.Forms.Label(); 51 | this.DictionarySettingsGroupBox = new System.Windows.Forms.GroupBox(); 52 | this.label1 = new System.Windows.Forms.Label(); 53 | this.OutputCapturedWordsCheckbox = new System.Windows.Forms.CheckBox(); 54 | this.ProcessingGroupbox = new System.Windows.Forms.GroupBox(); 55 | this.OutputInfoButton = new System.Windows.Forms.Button(); 56 | this.DictionarySettingsGroupBox.SuspendLayout(); 57 | this.ProcessingGroupbox.SuspendLayout(); 58 | this.SuspendLayout(); 59 | // 60 | // BgWorker 61 | // 62 | this.BgWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.BgWorkerClean_DoWork); 63 | this.BgWorker.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.BgWorker_RunWorkerCompleted); 64 | // 65 | // ScanSubfolderCheckbox 66 | // 67 | this.ScanSubfolderCheckbox.AutoSize = true; 68 | this.ScanSubfolderCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 69 | this.ScanSubfolderCheckbox.Location = new System.Drawing.Point(22, 78); 70 | this.ScanSubfolderCheckbox.Name = "ScanSubfolderCheckbox"; 71 | this.ScanSubfolderCheckbox.Size = new System.Drawing.Size(108, 17); 72 | this.ScanSubfolderCheckbox.TabIndex = 2; 73 | this.ScanSubfolderCheckbox.Text = "Scan subfolders?"; 74 | this.ScanSubfolderCheckbox.UseVisualStyleBackColor = true; 75 | // 76 | // StartButton 77 | // 78 | this.StartButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 79 | this.StartButton.Location = new System.Drawing.Point(22, 110); 80 | this.StartButton.Name = "StartButton"; 81 | this.StartButton.Size = new System.Drawing.Size(114, 32); 82 | this.StartButton.TabIndex = 3; 83 | this.StartButton.Text = "Start"; 84 | this.StartButton.UseVisualStyleBackColor = true; 85 | this.StartButton.Click += new System.EventHandler(this.StartButton_Click); 86 | // 87 | // FolderBrowser 88 | // 89 | this.FolderBrowser.RootFolder = System.Environment.SpecialFolder.MyComputer; 90 | this.FolderBrowser.ShowNewFolderButton = false; 91 | // 92 | // FilenameLabel 93 | // 94 | this.FilenameLabel.AutoEllipsis = true; 95 | this.FilenameLabel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 96 | this.FilenameLabel.Location = new System.Drawing.Point(13, 428); 97 | this.FilenameLabel.Name = "FilenameLabel"; 98 | this.FilenameLabel.Size = new System.Drawing.Size(859, 25); 99 | this.FilenameLabel.TabIndex = 6; 100 | this.FilenameLabel.Text = "Waiting to analyze texts..."; 101 | this.FilenameLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; 102 | // 103 | // saveFileDialog 104 | // 105 | this.saveFileDialog.FileName = "VocabulateOutput.csv"; 106 | this.saveFileDialog.Filter = "CSV Files|*.csv"; 107 | this.saveFileDialog.Title = "Please choose where to save your output"; 108 | // 109 | // EncodingDropdown 110 | // 111 | this.EncodingDropdown.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 112 | this.EncodingDropdown.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 113 | this.EncodingDropdown.FormattingEnabled = true; 114 | this.EncodingDropdown.Location = new System.Drawing.Point(22, 53); 115 | this.EncodingDropdown.Name = "EncodingDropdown"; 116 | this.EncodingDropdown.Size = new System.Drawing.Size(221, 23); 117 | this.EncodingDropdown.TabIndex = 9; 118 | // 119 | // label4 120 | // 121 | this.label4.AutoSize = true; 122 | this.label4.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 123 | this.label4.Location = new System.Drawing.Point(33, 35); 124 | this.label4.Name = "label4"; 125 | this.label4.Size = new System.Drawing.Size(198, 15); 126 | this.label4.TabIndex = 10; 127 | this.label4.Text = "Encoding of Dictionary && Text Files:"; 128 | // 129 | // RawWCCheckbox 130 | // 131 | this.RawWCCheckbox.AutoSize = true; 132 | this.RawWCCheckbox.Checked = true; 133 | this.RawWCCheckbox.CheckState = System.Windows.Forms.CheckState.Checked; 134 | this.RawWCCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 135 | this.RawWCCheckbox.Location = new System.Drawing.Point(22, 32); 136 | this.RawWCCheckbox.Name = "RawWCCheckbox"; 137 | this.RawWCCheckbox.Size = new System.Drawing.Size(164, 17); 138 | this.RawWCCheckbox.TabIndex = 21; 139 | this.RawWCCheckbox.Text = "Output Raw Category Counts"; 140 | this.RawWCCheckbox.UseVisualStyleBackColor = true; 141 | // 142 | // openFileDialog 143 | // 144 | this.openFileDialog.FileName = "DictionaryFile.csv"; 145 | this.openFileDialog.Filter = "Dictionary Files|*.csv"; 146 | this.openFileDialog.RestoreDirectory = true; 147 | // 148 | // LoadDictionaryButton 149 | // 150 | this.LoadDictionaryButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 151 | this.LoadDictionaryButton.Location = new System.Drawing.Point(68, 182); 152 | this.LoadDictionaryButton.Name = "LoadDictionaryButton"; 153 | this.LoadDictionaryButton.Size = new System.Drawing.Size(129, 32); 154 | this.LoadDictionaryButton.TabIndex = 20; 155 | this.LoadDictionaryButton.Text = "Load Dictionary"; 156 | this.LoadDictionaryButton.UseVisualStyleBackColor = true; 157 | this.LoadDictionaryButton.Click += new System.EventHandler(this.LoadDictionaryButton_Click); 158 | // 159 | // StopListLabel 160 | // 161 | this.StopListLabel.AutoSize = true; 162 | this.StopListLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline))), System.Drawing.GraphicsUnit.Point, ((byte)(0))); 163 | this.StopListLabel.ForeColor = System.Drawing.SystemColors.ControlText; 164 | this.StopListLabel.Location = new System.Drawing.Point(95, 9); 165 | this.StopListLabel.Name = "StopListLabel"; 166 | this.StopListLabel.Size = new System.Drawing.Size(68, 16); 167 | this.StopListLabel.TabIndex = 21; 168 | this.StopListLabel.Text = "Stop List"; 169 | // 170 | // StopListTextBox 171 | // 172 | this.StopListTextBox.AcceptsReturn = true; 173 | this.StopListTextBox.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 174 | this.StopListTextBox.Location = new System.Drawing.Point(13, 32); 175 | this.StopListTextBox.MaxLength = 2147483647; 176 | this.StopListTextBox.Multiline = true; 177 | this.StopListTextBox.Name = "StopListTextBox"; 178 | this.StopListTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; 179 | this.StopListTextBox.Size = new System.Drawing.Size(243, 381); 180 | this.StopListTextBox.TabIndex = 0; 181 | this.StopListTextBox.WordWrap = false; 182 | // 183 | // CSVQuoteTextbox 184 | // 185 | this.CSVQuoteTextbox.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 186 | this.CSVQuoteTextbox.Location = new System.Drawing.Point(144, 137); 187 | this.CSVQuoteTextbox.MaxLength = 1; 188 | this.CSVQuoteTextbox.Name = "CSVQuoteTextbox"; 189 | this.CSVQuoteTextbox.Size = new System.Drawing.Size(65, 20); 190 | this.CSVQuoteTextbox.TabIndex = 25; 191 | this.CSVQuoteTextbox.Text = "\""; 192 | this.CSVQuoteTextbox.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; 193 | // 194 | // CSVDelimiterTextbox 195 | // 196 | this.CSVDelimiterTextbox.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 197 | this.CSVDelimiterTextbox.Location = new System.Drawing.Point(57, 137); 198 | this.CSVDelimiterTextbox.MaxLength = 1; 199 | this.CSVDelimiterTextbox.Name = "CSVDelimiterTextbox"; 200 | this.CSVDelimiterTextbox.Size = new System.Drawing.Size(65, 20); 201 | this.CSVDelimiterTextbox.TabIndex = 24; 202 | this.CSVDelimiterTextbox.Text = ","; 203 | this.CSVDelimiterTextbox.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; 204 | // 205 | // label42 206 | // 207 | this.label42.AutoSize = true; 208 | this.label42.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 209 | this.label42.Location = new System.Drawing.Point(141, 119); 210 | this.label42.Name = "label42"; 211 | this.label42.Size = new System.Drawing.Size(43, 15); 212 | this.label42.TabIndex = 23; 213 | this.label42.Text = "Quote:"; 214 | // 215 | // label41 216 | // 217 | this.label41.AutoSize = true; 218 | this.label41.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 219 | this.label41.Location = new System.Drawing.Point(56, 119); 220 | this.label41.Name = "label41"; 221 | this.label41.Size = new System.Drawing.Size(60, 15); 222 | this.label41.TabIndex = 22; 223 | this.label41.Text = "Delimiter:"; 224 | // 225 | // DictStructureTextBox 226 | // 227 | this.DictStructureTextBox.AcceptsReturn = true; 228 | this.DictStructureTextBox.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 229 | this.DictStructureTextBox.Location = new System.Drawing.Point(270, 32); 230 | this.DictStructureTextBox.MaxLength = 2147483647; 231 | this.DictStructureTextBox.Multiline = true; 232 | this.DictStructureTextBox.Name = "DictStructureTextBox"; 233 | this.DictStructureTextBox.ReadOnly = true; 234 | this.DictStructureTextBox.ScrollBars = System.Windows.Forms.ScrollBars.Both; 235 | this.DictStructureTextBox.Size = new System.Drawing.Size(313, 381); 236 | this.DictStructureTextBox.TabIndex = 26; 237 | this.DictStructureTextBox.WordWrap = false; 238 | // 239 | // DictionaryStructureLabel 240 | // 241 | this.DictionaryStructureLabel.AutoSize = true; 242 | this.DictionaryStructureLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline))), System.Drawing.GraphicsUnit.Point, ((byte)(0))); 243 | this.DictionaryStructureLabel.Location = new System.Drawing.Point(352, 9); 244 | this.DictionaryStructureLabel.Name = "DictionaryStructureLabel"; 245 | this.DictionaryStructureLabel.Size = new System.Drawing.Size(143, 16); 246 | this.DictionaryStructureLabel.TabIndex = 27; 247 | this.DictionaryStructureLabel.Text = "Dictionary Structure"; 248 | // 249 | // DictionarySettingsGroupBox 250 | // 251 | this.DictionarySettingsGroupBox.Controls.Add(this.label1); 252 | this.DictionarySettingsGroupBox.Controls.Add(this.CSVQuoteTextbox); 253 | this.DictionarySettingsGroupBox.Controls.Add(this.label4); 254 | this.DictionarySettingsGroupBox.Controls.Add(this.EncodingDropdown); 255 | this.DictionarySettingsGroupBox.Controls.Add(this.label41); 256 | this.DictionarySettingsGroupBox.Controls.Add(this.CSVDelimiterTextbox); 257 | this.DictionarySettingsGroupBox.Controls.Add(this.LoadDictionaryButton); 258 | this.DictionarySettingsGroupBox.Controls.Add(this.label42); 259 | this.DictionarySettingsGroupBox.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline))), System.Drawing.GraphicsUnit.Point, ((byte)(0))); 260 | this.DictionarySettingsGroupBox.Location = new System.Drawing.Point(602, 13); 261 | this.DictionarySettingsGroupBox.Name = "DictionarySettingsGroupBox"; 262 | this.DictionarySettingsGroupBox.Size = new System.Drawing.Size(264, 231); 263 | this.DictionarySettingsGroupBox.TabIndex = 28; 264 | this.DictionarySettingsGroupBox.TabStop = false; 265 | this.DictionarySettingsGroupBox.Text = "Dictionary / File Settings"; 266 | // 267 | // label1 268 | // 269 | this.label1.AutoSize = true; 270 | this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 271 | this.label1.Location = new System.Drawing.Point(50, 97); 272 | this.label1.Name = "label1"; 273 | this.label1.Size = new System.Drawing.Size(169, 15); 274 | this.label1.TabIndex = 26; 275 | this.label1.Text = "Dictionary File CSV Properties"; 276 | // 277 | // OutputCapturedWordsCheckbox 278 | // 279 | this.OutputCapturedWordsCheckbox.AutoSize = true; 280 | this.OutputCapturedWordsCheckbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 281 | this.OutputCapturedWordsCheckbox.Location = new System.Drawing.Point(22, 55); 282 | this.OutputCapturedWordsCheckbox.Name = "OutputCapturedWordsCheckbox"; 283 | this.OutputCapturedWordsCheckbox.Size = new System.Drawing.Size(169, 17); 284 | this.OutputCapturedWordsCheckbox.TabIndex = 29; 285 | this.OutputCapturedWordsCheckbox.Text = "Output Captured Text (Debug)"; 286 | this.OutputCapturedWordsCheckbox.UseVisualStyleBackColor = true; 287 | // 288 | // ProcessingGroupbox 289 | // 290 | this.ProcessingGroupbox.Controls.Add(this.OutputInfoButton); 291 | this.ProcessingGroupbox.Controls.Add(this.OutputCapturedWordsCheckbox); 292 | this.ProcessingGroupbox.Controls.Add(this.StartButton); 293 | this.ProcessingGroupbox.Controls.Add(this.ScanSubfolderCheckbox); 294 | this.ProcessingGroupbox.Controls.Add(this.RawWCCheckbox); 295 | this.ProcessingGroupbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline))), System.Drawing.GraphicsUnit.Point, ((byte)(0))); 296 | this.ProcessingGroupbox.Location = new System.Drawing.Point(602, 256); 297 | this.ProcessingGroupbox.Name = "ProcessingGroupbox"; 298 | this.ProcessingGroupbox.Size = new System.Drawing.Size(264, 157); 299 | this.ProcessingGroupbox.TabIndex = 30; 300 | this.ProcessingGroupbox.TabStop = false; 301 | this.ProcessingGroupbox.Text = "Processing Settings"; 302 | // 303 | // OutputInfoButton 304 | // 305 | this.OutputInfoButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 306 | this.OutputInfoButton.Location = new System.Drawing.Point(143, 110); 307 | this.OutputInfoButton.Name = "OutputInfoButton"; 308 | this.OutputInfoButton.Size = new System.Drawing.Size(115, 32); 309 | this.OutputInfoButton.TabIndex = 30; 310 | this.OutputInfoButton.Text = "Output Info"; 311 | this.OutputInfoButton.UseVisualStyleBackColor = true; 312 | this.OutputInfoButton.Click += new System.EventHandler(this.OutputInfoButton_Click); 313 | // 314 | // VocabulateMainForm 315 | // 316 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 317 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 318 | this.BackColor = System.Drawing.Color.CadetBlue; 319 | this.ClientSize = new System.Drawing.Size(884, 461); 320 | this.Controls.Add(this.DictionarySettingsGroupBox); 321 | this.Controls.Add(this.DictionaryStructureLabel); 322 | this.Controls.Add(this.StopListTextBox); 323 | this.Controls.Add(this.StopListLabel); 324 | this.Controls.Add(this.FilenameLabel); 325 | this.Controls.Add(this.DictStructureTextBox); 326 | this.Controls.Add(this.ProcessingGroupbox); 327 | this.DoubleBuffered = true; 328 | this.ForeColor = System.Drawing.SystemColors.ControlText; 329 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 330 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 331 | this.MaximizeBox = false; 332 | this.MaximumSize = new System.Drawing.Size(900, 500); 333 | this.MinimumSize = new System.Drawing.Size(900, 500); 334 | this.Name = "VocabulateMainForm"; 335 | this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; 336 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 337 | this.Text = "Vocabulate"; 338 | this.DictionarySettingsGroupBox.ResumeLayout(false); 339 | this.DictionarySettingsGroupBox.PerformLayout(); 340 | this.ProcessingGroupbox.ResumeLayout(false); 341 | this.ProcessingGroupbox.PerformLayout(); 342 | this.ResumeLayout(false); 343 | this.PerformLayout(); 344 | 345 | } 346 | 347 | #endregion 348 | private System.ComponentModel.BackgroundWorker BgWorker; 349 | private System.Windows.Forms.CheckBox ScanSubfolderCheckbox; 350 | private System.Windows.Forms.Button StartButton; 351 | private System.Windows.Forms.FolderBrowserDialog FolderBrowser; 352 | private System.Windows.Forms.Label FilenameLabel; 353 | private System.Windows.Forms.SaveFileDialog saveFileDialog; 354 | private System.Windows.Forms.ComboBox EncodingDropdown; 355 | private System.Windows.Forms.Label label4; 356 | private System.Windows.Forms.OpenFileDialog openFileDialog; 357 | private System.Windows.Forms.Button LoadDictionaryButton; 358 | private System.Windows.Forms.CheckBox RawWCCheckbox; 359 | private System.Windows.Forms.Label StopListLabel; 360 | private System.Windows.Forms.TextBox StopListTextBox; 361 | private System.Windows.Forms.TextBox CSVQuoteTextbox; 362 | private System.Windows.Forms.TextBox CSVDelimiterTextbox; 363 | private System.Windows.Forms.Label label42; 364 | private System.Windows.Forms.Label label41; 365 | private System.Windows.Forms.TextBox DictStructureTextBox; 366 | private System.Windows.Forms.Label DictionaryStructureLabel; 367 | private System.Windows.Forms.GroupBox DictionarySettingsGroupBox; 368 | private System.Windows.Forms.Label label1; 369 | private System.Windows.Forms.CheckBox OutputCapturedWordsCheckbox; 370 | private System.Windows.Forms.GroupBox ProcessingGroupbox; 371 | private System.Windows.Forms.Button OutputInfoButton; 372 | } 373 | } 374 | 375 | -------------------------------------------------------------------------------- /VocabulateSrc/MainForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Linq; 6 | using System.Text; 7 | using System.Windows.Forms; 8 | using System.IO; 9 | using nltk.tokenize.casual.NET; 10 | 11 | 12 | 13 | namespace VocabulateApplication 14 | { 15 | 16 | public partial class VocabulateMainForm : Form 17 | { 18 | 19 | 20 | //initialize the space for our dictionary data 21 | Vocabulate.DictionaryData DictData = new Vocabulate.DictionaryData(); 22 | 23 | 24 | 25 | //this is what runs at initialization 26 | public VocabulateMainForm() 27 | { 28 | 29 | InitializeComponent(); 30 | 31 | foreach(var encoding in Encoding.GetEncodings()) 32 | { 33 | EncodingDropdown.Items.Add(encoding.Name); 34 | } 35 | 36 | try 37 | { 38 | EncodingDropdown.SelectedIndex = EncodingDropdown.FindStringExact("utf-8"); 39 | } 40 | catch 41 | { 42 | EncodingDropdown.SelectedIndex = EncodingDropdown.FindStringExact(Encoding.Default.BodyName); 43 | } 44 | 45 | //load stoplist 46 | StopListTextBox.Text = Vocabulate.Properties.Resources.StopListCharacters + Environment.NewLine + Vocabulate.Properties.Resources.StopListEN; 47 | 48 | 49 | } 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | private void StartButton_Click(object sender, EventArgs e) 58 | { 59 | 60 | if (CSVDelimiterTextbox.Text.Length < 1) CSVDelimiterTextbox.Text = ","; 61 | if (CSVQuoteTextbox.Text.Length < 1) CSVQuoteTextbox.Text = "\""; 62 | 63 | //make sure that our dictionary is loaded before anything else 64 | if (DictData.DictionaryLoaded != true) 65 | { 66 | MessageBox.Show("You must first load a dictionary file before you can analyze your texts.", "Dictionary not loaded!", MessageBoxButtons.OK, MessageBoxIcon.Error); 67 | return; 68 | } 69 | 70 | 71 | FolderBrowser.Description = "Please choose the location of your .txt files to analyze"; 72 | if (FolderBrowser.ShowDialog() != DialogResult.Cancel) { 73 | 74 | DictData.TextFileFolder = FolderBrowser.SelectedPath.ToString(); 75 | 76 | if (DictData.TextFileFolder != "") 77 | { 78 | 79 | saveFileDialog.FileName = "Vocabulate_Output.csv"; 80 | 81 | saveFileDialog.InitialDirectory = DictData.TextFileFolder; 82 | if (saveFileDialog.ShowDialog() != DialogResult.Cancel) { 83 | 84 | 85 | DictData.OutputFileLocation = saveFileDialog.FileName; 86 | DictData.RawWordCounts = RawWCCheckbox.Checked; 87 | DictData.StopListRawText = StopListTextBox.Text; 88 | DictData.CSVDelimiter = CSVDelimiterTextbox.Text[0]; 89 | DictData.CSVQuote = CSVQuoteTextbox.Text[0]; 90 | DictData.OutputCapturedText = OutputCapturedWordsCheckbox.Checked; 91 | 92 | if (DictData.OutputFileLocation != "") { 93 | 94 | StopListTextBox.Enabled = false; 95 | StartButton.Enabled = false; 96 | ScanSubfolderCheckbox.Enabled = false; 97 | EncodingDropdown.Enabled = false; 98 | LoadDictionaryButton.Enabled = false; 99 | RawWCCheckbox.Enabled = false; 100 | CSVDelimiterTextbox.Enabled = false; 101 | CSVQuoteTextbox.Enabled = false; 102 | OutputCapturedWordsCheckbox.Enabled = false; 103 | 104 | BgWorker.RunWorkerAsync(DictData); 105 | } 106 | } 107 | } 108 | 109 | } 110 | 111 | 112 | 113 | } 114 | 115 | 116 | 117 | 118 | 119 | 120 | private void BgWorkerClean_DoWork(object sender, DoWorkEventArgs e) 121 | { 122 | 123 | 124 | Vocabulate.DictionaryData DictData = (Vocabulate.DictionaryData)e.Argument; 125 | TwitterAwareTokenizer Tokenizer = new TwitterAwareTokenizer(); 126 | Tokenizer.Initialize_Regex(); 127 | Vocabulate.StopWordRemover StopList = new Vocabulate.StopWordRemover(); 128 | StopList.BuildStopList(DictData.StopListRawText); 129 | 130 | //sets up how many columns we're using for output 131 | short OutputColumnsModifier = 2; 132 | if (DictData.RawWordCounts) OutputColumnsModifier = 4; 133 | short OutputCapturedText = 0; 134 | if (DictData.OutputCapturedText) OutputCapturedText = 1; 135 | 136 | 137 | //selects the text encoding based on user selection 138 | Encoding SelectedEncoding = null; 139 | this.Invoke((MethodInvoker)delegate () 140 | { 141 | SelectedEncoding = Encoding.GetEncoding(EncodingDropdown.SelectedItem.ToString()); 142 | }); 143 | 144 | 145 | 146 | //get the list of files 147 | var SearchDepth = SearchOption.TopDirectoryOnly; 148 | if (ScanSubfolderCheckbox.Checked) 149 | { 150 | SearchDepth = SearchOption.AllDirectories; 151 | } 152 | var files = Directory.EnumerateFiles(DictData.TextFileFolder, "*.txt", SearchDepth); 153 | 154 | string CSVQuote = DictData.CSVQuote.ToString(); 155 | string CSVDelimiter = DictData.CSVDelimiter.ToString(); 156 | 157 | try { 158 | 159 | //open up the output file 160 | using (StreamWriter outputFile = new StreamWriter(new FileStream(DictData.OutputFileLocation, FileMode.Create), SelectedEncoding)) 161 | { 162 | 163 | short NumberOfHeaderLeadingColumns = 9; 164 | 165 | //write the header row to the output file 166 | StringBuilder HeaderString = new StringBuilder(); 167 | HeaderString.Append(CSVQuote + "Filename" + CSVQuote + CSVDelimiter + 168 | CSVQuote + "WC" + CSVQuote + CSVDelimiter + 169 | CSVQuote + "TC_Raw" + CSVQuote + CSVDelimiter + 170 | CSVQuote + "TTR_Raw" + CSVQuote + CSVDelimiter + 171 | CSVQuote + "TC_Clean" + CSVQuote + CSVDelimiter + 172 | CSVQuote + "TTR_Clean" + CSVQuote + CSVDelimiter + 173 | CSVQuote + "TC_NonDict" + CSVQuote + CSVDelimiter + 174 | CSVQuote + "TTR_NonDict" + CSVQuote + CSVDelimiter + 175 | CSVQuote + "DictPercent" + CSVQuote); 176 | 177 | 178 | //output headers for the Concept-constrained Concept-Word Ratio (CWR) 179 | for (int i = 0; i < DictData.NumCats; i++) HeaderString.Append(CSVDelimiter + CSVQuote + 180 | DictData.CatNames[i].Replace(CSVQuote, CSVQuote + CSVQuote) + "_CWR" + 181 | CSVQuote); 182 | 183 | 184 | //output headers for the Concept-Category Ratio (CCR) 185 | for (int i = 0; i < DictData.NumCats; i++) HeaderString.Append(CSVDelimiter + CSVQuote + 186 | DictData.CatNames[i].Replace(CSVQuote, CSVQuote + CSVQuote) + "_CCR" + 187 | CSVQuote); 188 | 189 | //if they want the raw category counts, then we add those to the header as well 190 | if(DictData.RawWordCounts) 191 | { 192 | for (int i = 0; i < DictData.NumCats; i++) HeaderString.Append(CSVDelimiter + CSVQuote + 193 | DictData.CatNames[i].Replace(CSVQuote, CSVQuote + CSVQuote) + "_Count" + 194 | CSVQuote); 195 | for (int i = 0; i < DictData.NumCats; i++) HeaderString.Append(CSVDelimiter + CSVQuote + 196 | DictData.CatNames[i].Replace(CSVQuote, CSVQuote + CSVQuote) + "_Unique" + 197 | CSVQuote); 198 | } 199 | 200 | if (DictData.OutputCapturedText) HeaderString.Append(CSVDelimiter + CSVQuote + "CapturedText" + CSVQuote); 201 | 202 | outputFile.WriteLine(HeaderString.ToString()); 203 | 204 | 205 | foreach (string fileName in files) 206 | { 207 | 208 | //set up our variables to report 209 | string Filename_Clean = Path.GetFileName(fileName); 210 | Dictionary DictionaryResults = new Dictionary(); 211 | foreach (string Concept in DictData.ConceptMap.Keys) DictionaryResults.Add(Concept, 0); 212 | 213 | //structure of DictionaryResults will look like this: 214 | 215 | //Concept -> Total 216 | 217 | //this will make it far easier to go through and calculate number of unique concepts divided by total number of words 218 | //at the top level categories down the road 219 | 220 | 221 | 222 | 223 | 224 | //for (int i = 0; i < DictData.NumCats; i++) DictionaryResults.Add(DictData.CatValues[i], 0); 225 | 226 | //report what we're working on 227 | FilenameLabel.Invoke((MethodInvoker)delegate 228 | { 229 | FilenameLabel.Text = "Analyzing: " + Filename_Clean; 230 | }); 231 | 232 | 233 | 234 | 235 | //read in the text file, convert everything to lowercase 236 | string readText = File.ReadAllText(fileName, SelectedEncoding).ToLower(); 237 | 238 | 239 | 240 | int NumberOfMatches = 0; 241 | 242 | int WordCount_WhitespaceTokenizer = Tokenizer.TokenizeWhitespace(readText.Trim()).Length; 243 | 244 | //splits everything out into words 245 | string[] Words = Tokenizer.tokenize(readText.Trim()); 246 | Words = StopList.ClearStopWords(Words); 247 | 248 | int TotalStringLength_BeforeStopList = Words.Length; 249 | double TTR_Raw = (Words.Distinct().Count() / (double)TotalStringLength_BeforeStopList) * 100; 250 | 251 | 252 | Words = Words.Where(x => !string.IsNullOrWhiteSpace(x)).ToArray(); 253 | int TotalStringLength_AfterStopList = Words.Length; 254 | double TTR_Clean = (Words.Distinct().Count() / (double)TotalStringLength_AfterStopList) * 100; 255 | 256 | StringBuilder CapturedText = new StringBuilder(); 257 | 258 | List NonmatchedTokens = new List(); 259 | 260 | 261 | // _ _ _____ _ 262 | // / \ _ __ __ _| |_ _ _______ |_ _|____ _| |_ 263 | // / _ \ | '_ \ / _` | | | | |_ / _ \ | |/ _ \ \/ / __| 264 | // / ___ \| | | | (_| | | |_| |/ / __/ | | __/> <| |_ 265 | // /_/ \_\_| |_|\__,_|_|\__, /___\___| |_|\___/_/\_\\__| 266 | // |___/ 267 | 268 | 269 | //iterate over all words in the text file 270 | for (int i = 0; i < TotalStringLength_AfterStopList; i++) 271 | { 272 | 273 | 274 | bool TokenMatched = false; 275 | //iterate over n-grams, starting with the largest possible n-gram (derived from the user's dictionary file) 276 | for (int NumberOfWords = DictData.MaxWords; NumberOfWords > 0; NumberOfWords--) 277 | { 278 | 279 | 280 | 281 | //make sure that we don't overextend past the array 282 | if (i + NumberOfWords - 1 >= TotalStringLength_AfterStopList) continue; 283 | 284 | //make the target string 285 | 286 | string TargetString; 287 | 288 | if (NumberOfWords > 1) 289 | { 290 | TargetString = String.Join(" ", Words.Skip(i).Take(NumberOfWords).ToArray()); 291 | } 292 | else 293 | { 294 | TargetString = Words[i]; 295 | } 296 | 297 | 298 | //look for an exact match 299 | 300 | if (DictData.FullDictionaryMap["Standards"].ContainsKey(NumberOfWords)) 301 | { 302 | if (DictData.FullDictionaryMap["Standards"][NumberOfWords].ContainsKey(TargetString)) 303 | { 304 | 305 | //add in the number of words found 306 | NumberOfMatches += NumberOfWords; 307 | 308 | //increment results 309 | DictionaryResults[DictData.FullDictionaryMap["Standards"][NumberOfWords][TargetString]] += 1; 310 | 311 | 312 | //manually increment the for loop so that we're not testing on words that have already been picked up 313 | i += NumberOfWords - 1; 314 | //break out of the lower level for loop back to moving on to new words altogether 315 | TokenMatched = true; 316 | 317 | if (DictData.OutputCapturedText) CapturedText.Append(TargetString.Replace(CSVQuote, CSVQuote + CSVQuote) + " "); 318 | 319 | break; 320 | } 321 | } 322 | //if there isn't an exact match, we have to go through the wildcards 323 | if (DictData.WildCardArrays.ContainsKey(NumberOfWords)) 324 | { 325 | for (int j = 0; j < DictData.WildCardArrays[NumberOfWords].Length; j++) 326 | { 327 | if (DictData.PrecompiledWildcards[DictData.WildCardArrays[NumberOfWords][j]].Matches(TargetString).Count > 0) 328 | { 329 | 330 | //add in the number of words found 331 | NumberOfMatches += NumberOfWords; 332 | 333 | //increment results 334 | DictionaryResults[DictData.FullDictionaryMap["Wildcards"][NumberOfWords][DictData.WildCardArrays[NumberOfWords][j]]] += 1; 335 | 336 | //manually increment the for loop so that we're not testing on words that have already been picked up 337 | i += NumberOfWords - 1; 338 | //break out of the lower level for loop back to moving on to new words altogether 339 | TokenMatched = true; 340 | 341 | if (DictData.OutputCapturedText) CapturedText.Append(TargetString.Replace(CSVQuote, CSVQuote + CSVQuote) + " "); 342 | 343 | break; 344 | 345 | } 346 | } 347 | } 348 | } 349 | 350 | //this is what we do if we didn't find any match in our dictionary 351 | if (!TokenMatched) NonmatchedTokens.Add(Words[i]); 352 | 353 | 354 | 355 | 356 | 357 | } 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | // __ __ _ _ ___ _ _ 366 | // \ \ / / __(_) |_ ___ / _ \ _ _| |_ _ __ _ _| |_ 367 | // \ \ /\ / / '__| | __/ _ \ | | | | | | | __| '_ \| | | | __| 368 | // \ V V /| | | | || __/ | |_| | |_| | |_| |_) | |_| | |_ 369 | // \_/\_/ |_| |_|\__\___| \___/ \__,_|\__| .__/ \__,_|\__| 370 | // |_| 371 | 372 | 373 | 374 | 375 | string[] OutputString = new string[NumberOfHeaderLeadingColumns + (DictData.NumCats * OutputColumnsModifier) + OutputCapturedText]; 376 | 377 | for (int i = 0; i < OutputString.Length; i++) OutputString[i] = ""; 378 | 379 | 380 | OutputString[0] = CSVQuote + Filename_Clean + CSVQuote; //filename 381 | OutputString[1] = WordCount_WhitespaceTokenizer.ToString(); //WordCount 382 | OutputString[2] = TotalStringLength_BeforeStopList.ToString(); //total number of words 383 | if (TotalStringLength_BeforeStopList > 0) OutputString[3] = TTR_Raw.ToString(); //TTR_Raw 384 | OutputString[4] = TotalStringLength_AfterStopList.ToString(); //total number of tokens after stoplist processing 385 | if (TotalStringLength_AfterStopList > 0) OutputString[5] = TTR_Clean.ToString(); // TTR_Clean 386 | OutputString[6] = (TotalStringLength_AfterStopList - NumberOfMatches).ToString(); //number of non-dictionary tokens 387 | if (NonmatchedTokens.Count() > 0) OutputString[7] = (((double)NonmatchedTokens.Distinct().Count() / NonmatchedTokens.Count()) * 100).ToString(); //TTR for non-dictionary words 388 | 389 | 390 | //calculate and output the results 391 | if (TotalStringLength_BeforeStopList > 0) 392 | { 393 | 394 | OutputString[8] = (((double)NumberOfMatches / TotalStringLength_BeforeStopList) * 100).ToString(); //dictpercent 395 | 396 | 397 | //pull together the results here 398 | Dictionary CompiledResults = new Dictionary(); 399 | foreach(string TopLevelCategory in DictData.CatNames) 400 | { 401 | CompiledResults.Add(TopLevelCategory, new ulong[2] { 0, 0 }); 402 | } 403 | 404 | foreach(string ConceptKey in DictData.ConceptMap.Keys) 405 | { 406 | if(DictionaryResults[ConceptKey] > 0) 407 | { 408 | for (int i = 0; i < DictData.ConceptMap[ConceptKey].Length; i++) 409 | { 410 | //if the Concept was found in the text, increment the first index (i.e., the number of unique concepts) by 1 411 | CompiledResults[DictData.ConceptMap[ConceptKey][i]][0] += 1; 412 | //if the Concept was found in the text, add the number of times it occurred 413 | CompiledResults[DictData.ConceptMap[ConceptKey][i]][1] += DictionaryResults[ConceptKey]; 414 | } 415 | } 416 | } 417 | 418 | 419 | //this is where we actually calulate and output the CWR scores 420 | for (int i = 0; i < DictData.CategoryOrder.Count; i++) 421 | { 422 | 423 | if (WordCount_WhitespaceTokenizer > 0) 424 | { 425 | OutputString[i + NumberOfHeaderLeadingColumns] = (((double)CompiledResults[DictData.CategoryOrder[i]][0] / WordCount_WhitespaceTokenizer) * 100.0).ToString(); 426 | } 427 | 428 | } 429 | 430 | //this is where we actually calulate and output the CCR scores 431 | for (int i = 0; i < DictData.CategoryOrder.Count; i++) 432 | { 433 | 434 | if (CompiledResults[DictData.CategoryOrder[i]][0] > 0) 435 | { 436 | OutputString[i + NumberOfHeaderLeadingColumns + DictData.NumCats] = (((double)CompiledResults[DictData.CategoryOrder[i]][0] / CompiledResults[DictData.CategoryOrder[i]][1]) * 100.0).ToString(); 437 | } 438 | 439 | } 440 | 441 | //this is if the user asked for the raw counts per category 442 | if (DictData.RawWordCounts) 443 | { 444 | 445 | for (int i = 0; i < DictData.CategoryOrder.Count; i++) 446 | { 447 | 448 | OutputString[i + NumberOfHeaderLeadingColumns + (DictData.NumCats * 2)] = CompiledResults[DictData.CategoryOrder[i]][1].ToString(); 449 | OutputString[i + NumberOfHeaderLeadingColumns + (DictData.NumCats * 3)] = CompiledResults[DictData.CategoryOrder[i]][0].ToString(); 450 | 451 | } 452 | 453 | 454 | } 455 | 456 | 457 | 458 | } 459 | else 460 | { 461 | OutputString[3] = ""; 462 | for (int i = 0; i < DictData.NumCats; i++) OutputString[i + NumberOfHeaderLeadingColumns] = ""; 463 | } 464 | 465 | //if we're outputting the captured strings, we do that here 466 | if(DictData.OutputCapturedText) OutputString[OutputString.Length - 1] = CSVQuote + CapturedText.ToString() + CSVQuote; 467 | 468 | 469 | outputFile.WriteLine(String.Join(CSVDelimiter, OutputString)); 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | } 479 | 480 | 481 | } 482 | 483 | } 484 | catch 485 | { 486 | MessageBox.Show("Vocabulate encountered an issue somewhere while trying to analyze your texts. The most common cause of this is trying to open your output file while Vocabulate is still running. Did any of your input files move, or is your output file being opened/modified by another application?", "Error while analyzing", MessageBoxButtons.OK, MessageBoxIcon.Error); 487 | } 488 | 489 | 490 | } 491 | 492 | 493 | 494 | 495 | //when the bgworker is done running, we want to re-enable user controls and let them know that it's finished 496 | private void BgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 497 | { 498 | StartButton.Enabled = true; 499 | ScanSubfolderCheckbox.Enabled = true; 500 | EncodingDropdown.Enabled = true; 501 | StopListTextBox.Enabled = true; 502 | LoadDictionaryButton.Enabled = true; 503 | RawWCCheckbox.Enabled = true; 504 | CSVDelimiterTextbox.Enabled = true; 505 | CSVQuoteTextbox.Enabled = true; 506 | OutputCapturedWordsCheckbox.Enabled = true; 507 | FilenameLabel.Text = "Finished!"; 508 | MessageBox.Show("Vocabulate has finished analyzing your texts.", "Analysis Complete", MessageBoxButtons.OK, MessageBoxIcon.Information); 509 | } 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | // _ _ ____ _ _ _ 527 | // | | ___ __ _ __| | | _ \(_) ___| |_(_) ___ _ __ __ _ _ __ _ _ 528 | // | | / _ \ / _` |/ _` | | | | | |/ __| __| |/ _ \| '_ \ / _` | '__| | | | 529 | // | |__| (_) | (_| | (_| | | |_| | | (__| |_| | (_) | | | | (_| | | | |_| | 530 | // |_____\___/ \__,_|\__,_| |____/|_|\___|\__|_|\___/|_| |_|\__,_|_| \__, | 531 | // |___/ 532 | 533 | 534 | 535 | private void LoadDictionaryButton_Click(object sender, EventArgs e) 536 | { 537 | 538 | 539 | DictData = new Vocabulate.DictionaryData(); 540 | 541 | DictStructureTextBox.Text = ""; 542 | 543 | 544 | 545 | openFileDialog.Title = "Please choose your dictionary file"; 546 | 547 | if (openFileDialog.ShowDialog() != DialogResult.Cancel) 548 | { 549 | 550 | FolderBrowser.SelectedPath = System.IO.Path.GetDirectoryName(openFileDialog.FileName); 551 | 552 | //Load dictionary file now 553 | try 554 | { 555 | Encoding SelectedEncoding = null; 556 | SelectedEncoding = Encoding.GetEncoding(EncodingDropdown.SelectedItem.ToString()); 557 | 558 | Vocabulate.LoadDictionary DictionaryLoader = new Vocabulate.LoadDictionary(); 559 | DictData = DictionaryLoader.LoadDictionaryFile(DictData, openFileDialog.FileName, SelectedEncoding, CSVDelimiterTextbox.Text[0], CSVQuoteTextbox.Text[0]); 560 | 561 | //this is where we load up the dictionary preview 562 | StringBuilder DictPreview = new StringBuilder(); 563 | 564 | DictPreview.AppendLine("TERM -> CONCEPT -> [CATEGORIES]"); 565 | DictPreview.AppendLine("-------------------------------"); 566 | 567 | foreach (string StemType in DictData.FullDictionaryMap.Keys) { 568 | foreach (int WordCountKey in DictData.FullDictionaryMap[StemType].Keys) 569 | { 570 | 571 | foreach(var Word in DictData.FullDictionaryMap[StemType][WordCountKey]) 572 | { 573 | 574 | DictPreview.AppendLine(Word.Key + " -> " + Word.Value + " -> [" + string.Join(", ", DictData.ConceptMap[Word.Value]) + "]"); 575 | 576 | } 577 | 578 | } 579 | } 580 | 581 | 582 | DictStructureTextBox.Text = DictPreview.ToString(); 583 | 584 | MessageBox.Show("Your dictionary has been successfully loaded.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); 585 | 586 | } 587 | catch 588 | { 589 | MessageBox.Show("Vocabulate is having trouble loading your dictionary file. The most common causes of this problem are:" + Environment.NewLine + Environment.NewLine + 590 | "-> Your dictionary file is already being used by another application" + Environment.NewLine + 591 | "-> Your dictionary is formatted incorrectly" + Environment.NewLine + 592 | "-> You dictionary contains duplicate words (the same word appearing more than once)" + Environment.NewLine + Environment.NewLine + 593 | "Please check to make sure that none of these issues exist in your dictionary file.", 594 | "Dictionary Load Error", 595 | MessageBoxButtons.OK, MessageBoxIcon.Error); 596 | DictData.DictionaryLoaded = false; 597 | return; 598 | } 599 | 600 | } 601 | else 602 | { 603 | return; 604 | } 605 | 606 | 607 | } 608 | 609 | private void OutputInfoButton_Click(object sender, EventArgs e) 610 | { 611 | MessageBox.Show("Output Information" + Environment.NewLine + 612 | "----------------------------" + Environment.NewLine + 613 | "WC:\tWord Count" + Environment.NewLine + 614 | "TC:\tToken Count" + Environment.NewLine + 615 | "TTR:\tType/Token Ratio" + Environment.NewLine + 616 | "CWR:\tConcept/Word Ratio" + Environment.NewLine + 617 | "CCR:\tConcept/Category Ratio" + Environment.NewLine, 618 | 619 | "Output Information", MessageBoxButtons.OK, MessageBoxIcon.Question); 620 | } 621 | } 622 | 623 | 624 | 625 | } 626 | -------------------------------------------------------------------------------- /VocabulateSrc/MainForm.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | 124 | 123, 17 125 | 126 | 127 | 252, 17 128 | 129 | 130 | 381, 17 131 | 132 | 133 | 134 | 135 | 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 205 | AAAAAAAAAAAAAAAAAAAAAAAAZ3DvAGdw7w9ncO+KZ3Dv9Wdw7/9ncO//Z3Dv/2dw7/9ncPD/anLo/3F6 206 | t/95gJn/gIeb/4CHm/95gJn/YWmQ/z9IhP84QoL/OUKC/zlCgv85QoL/OUKC/zlCgvU5QoKKOUKCDzlC 207 | ggAAAAAAAAAAAAAAAAAAAAAAAAAAAGdw7wBncO8KZ3Dvimdw7/lncO//Z3Dv/2dw7/9ncO//Z3Dw/2dv 208 | 6P96grr/i5Kg/4yTof+LkqD/i5Kg/4yTof+LkqH/anKU/zxFhP85QoL/OUKC/zlCgv85QoL/OUKC/zlC 209 | gvk5QoKKOUKCCjlCggAAAAAAAAAAAAAAAABncO8AZ3DvAWdw721ncO/1Z3Dv/2dw7/9ncO//Z3Dv/2hx 210 | 8f9gaeD/WWCd/4SLm/9wd4L/UVZe/0BFS/9ARUv/UVZf/3B3gv+Ei5v/RUtv/zQ9ef85QoP/OUKC/zlC 211 | gv85QoL/OUKC/zlCgvU5QoJtOUKCATlCggAAAAAAZ3DvAGdw7wBncO85Z3Dv4Wdw7/9ncO//Z3Dv/2dw 212 | 7/9ncPD/Ymvi/zY7cf9OU1//TVJZ/ycrLv8nKy7/Ky8y/ysvM/8nKy//Jysu/01SWv9HS1L/Gh84/zU+ 213 | ev85QoP/OUKC/zlCgv85QoL/OUKC/zlCguE5QoI5OUKCADlCggBncO8AZ3DvCmdw76dncO//Z3Dv/2dw 214 | 7/9ncO//Z3Dv/2Zv7f8/RIf/Gx4p/z1BSf9eY2z/eoCN/4OKmP+FjZr/hY2a/4OKmP96gI3/XmRt/zc7 215 | QP8KDQ7/HyVE/zhBgf85QoL/OUKC/zlCgv85QoL/OUKC/zlCgqc5QoIKOUKCAGdw7wBncO9FZ3Dv72dw 216 | 7/9ncO//Z3Dv/2dw7/9ocfH/VVzA/yAjN/8bHSj/XGFt/4uSof+KkaD/iZCf/4mQn/+JkJ//iZCf/4qR 217 | oP+Mk6L/Vlxk/woNDf8MDxX/LTVm/zpDg/85QoL/OUKC/zlCgv85QoL/OUKC7zlCgkU5QoIAZ3DvBGdw 218 | 75dncO//Z3Dv/2dw7/9ncO//Z3Dv/2Zv7P83PHP/GRsl/x4hLP9tcoH/i5Kh/4mQn/+JkJ//iZCf/4mQ 219 | n/+JkJ//iZCf/4uSof9pb3n/DhER/wgLCv8bIDj/OEGA/zlCgv85QoL/OUKC/zlCgv85QoL/OUKClzlC 220 | ggRncO8iZ3Dv1Gdw7/9ncO//Z3Dv/2dw7/9ocfH/XGPR/yMmP/8ZHCb/HB8q/2VreP+LkqH/iZCf/4mQ 221 | n/+JkJ//iZCf/4mQn/+JkJ//i5Kh/2Blb/8LDg7/CQsL/w4SGv8xOXD/OUOD/zlCgv85QoL/OUKC/zlC 222 | gv85QoLUOUKCImdw71BncO/yZ3Dv/2dw7/9ncO//Z3Dv/2hx8v9LUqf/Gx4q/xodKP8eISz/ZGl2/4qR 223 | oP+JkJ//iZCf/4mQn/+JkJ//iZCf/4mQn/+KkaD/Vlpj/wwPD/8JDAz/CQwN/ycuV/86Q4T/OUKC/zlC 224 | gv85QoL/OUKC/zlCgvI5QoJQZ3DvfWdw7/1ncO//Z3Dv/2dw7/9ncO//Z3Dw/zpAfP8ZHCX/GRwn/zI1 225 | QP9scHz/hYya/4mRoP+GjZz/gomX/4KJl/+GjZz/ipGg/4GIlf9cYWr/JSgs/wgLC/8ICwr/HSI9/zlC 226 | gv85QoL/OUKC/zlCgv85QoL/OUKC/TlCgn1ncO+dZ3Dv/2dw7/9ncO//Z3Dv/2dw7/9kbef/LjJb/xkc 227 | Jf8bHin/TlFc/2tvev94fYn/h46c/1BXYf9XXWj/V11p/1FXYv+Hjpz/c3iE/2lteP9ITFP/Cw4O/wgL 228 | Cv8VGSr/N0B9/zlCgv85QoL/OUKC/zlCgv85QoL/OUKCnWdw76xncO//Z3Dv/2dw7/9ncO//aHHx/15m 229 | 2P8lKUT/GRwl/yYpNf9hZXD/a296/2xxfP97gY3/c3qH/4GIlv+BiJb/dHqH/3uBjf9scHv/a296/19j 230 | bf8YGx3/CAsK/xAUHv80PHb/OUKD/zlCgv85QoL/OUKC/zlCgv85QoKsZ3DvrGdw7/9ncO//Z3Dv/2hx 231 | 8P9jbOf/QUiR/xwfL/8ZGyb/NThE/2lteP9manX/V1tl/2Roc/96f4v/hYya/4WMmv96f4z/ZGhz/1db 232 | Zf9manX/aW14/yotMf8HCgn/DhEX/y41Z/85QoL/OUKC/zlCgv85QoL/OUKC/zlCgqxncO+dZ3Dv/2dw 233 | 7/9ncPD/YWrg/zk/ev8dITL/Gh0o/xkcJ/89QUz/a296/z9DTf8PFBv/LTE6/2drdv9ucn3/bnJ9/2dr 234 | dv8tMTr/DxQb/z9DTf9rb3r/NDc8/wkMDv8VGCD/HSEy/ykuU/83P3v/OUKD/zlCgv85QoL/OUKCnWdw 235 | 731ncO/9Z3Dv/2Zu6/87QX7/Gh0n/xodJ/8aHSj/GRwn/zc7Rf9qbnn/NzxF/wgNFP8jKDD/ZWl0/2pu 236 | ef9qbnn/ZWl0/yQoMf8IDRT/NztE/2puef8uMjj/ExYe/xodKP8aHSf/Gh0n/ycsT/84QYD/OUKC/zlC 237 | gv07RId9Z3DvUGdw7/JocfH/WWHK/yEkOf8ZHCf/Gh0o/xodKP8ZHCf/JCcy/1xga/9iZnH/SExW/1pe 238 | aP9rb3r/a296/2tvev9rb3r/Wl5p/0hMVv9iZnH/XF9q/yEkLv8ZHCf/Gh0o/xodKP8aHSf/HSAw/zM7 239 | cf85QoL/RU6e8lZfxlBncO8iZ3Dv1Ghx8v9OVq//Gx4r/xodKP8aHSj/Gh0o/xodKP8aHCj/LzI9/1pd 240 | aP9na3b/Z2t2/2Nncv9eYm3/XmJt/2Nncv9na3b/Z2t2/1pdaf8wMj7/Gh0o/xodKP8aHSj/Gh0o/xod 241 | KP8aHSn/LjVk/0dQo/9gad/Ua3T4Imdw7wRncO+XaHHy/1NbvP8dIDD/Gh0n/xodKP8aHSj/Gh0o/xod 242 | KP8ZHCf/ISQv/ysuOf8sLzr/Jyo1/yIlMP8iJTD/Jyo1/y0wO/8rLjn/ISQv/xocKP8aHSj/Gh0o/xod 243 | KP8aHSj/Gh0o/xseKv8+RYr/Ymvj/2hx8ZdmcO4EZ3DvAGdw70VncPDvY2vk/zQ5av8aHCf/GRwl/xkc 244 | Jv8aHSf/Gh0o/xodKP8aHSj/GRwn/xkcJ/8ZHCf/GRwn/xkcJ/8ZHCf/GRwn/xkcJ/8aHSj/Gh0o/xod 245 | KP8aHSf/GRwl/xkbJf8aHSf/MjZm/2Bo3f9ocfHvZ3DvRWdw7wBncO8AZ3DvCmdw76dncPD/YGjc/0ZM 246 | mf87QHv/QEWI/yYqR/8ZHCb/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xod 247 | KP8aHSj/GRwm/yMmP/89Q4P/O0B8/0ZMmP9gaNz/aHHw/2dw76dncO8KZ3DvAGdw7wBncO8AZ3DvOWdw 248 | 7+FncPD/aHHx/2dw8P9ocfL/UFez/yEkOf8ZHCX/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xod 249 | KP8aHSj/Gh0o/xkcJf8hJDn/TVSt/2hx8f9ncfD/aHHx/2dw8P9ncO/hZ3DvOWdw7wBncO8AAAAAAGdw 250 | 7wBncO8BZ3DvbWdw7/VncO//Z3Dv/2dw7/9ncO//T1ax/ycrSf8ZHCb/GRwm/xodJ/8aHSj/Gh0o/xod 251 | KP8aHSj/Gh0n/xkcJv8ZHCb/JytI/09Wsf9ncO//Z3Dv/2dw7/9ncO//Z3Dv9Wdw721ncO8BZ3DvAAAA 252 | AAAAAAAAAAAAAGdw7wBncO8KZ3Dvimdw7/lncO//Z3Dv/2dw7/9ocfH/XGTT/0BGif8pLU3/HiEy/xsd 253 | Kf8aHCf/Ghwn/xodKf8eITL/KS1N/0BFif9cZNP/aHHx/2dw7/9ncO//Z3Dv/2dw7/lncO+KZ3DvCmdw 254 | 7wAAAAAAAAAAAAAAAAAAAAAAAAAAAGdw7wBncO8PZ3Dvimdw7/VncO//Z3Dv/2dw7/9ocfH/Z3Dw/2Fp 255 | 3v9VXMD/S1Gm/0VMmP9FS5j/S1Gm/1VcwP9had//Z3Dw/2hx8f9ncO//Z3Dv/2dw7/9ncO/1Z3Dvimdw 256 | 7w9ncO8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdw7wBncO8KZ3DvbWdw7+FncO//Z3Dv/2dw 257 | 7/9ncO//Z3Dw/2hx8v9ocfL/aHHy/2hx8v9ocfL/aHHy/2dw8P9ncO//Z3Dv/2dw7/9ncO//Z3Dv4Wdw 258 | 721ncO8KZ3DvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdw7wBncO8CZ3DvOGdw 259 | 76dncO/vZ3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv72dw 260 | 76dncO84Z3DvAmdw7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdw 261 | 7wBncO8AZ3DvC2dw70VncO+XZ3Dv1Gdw7/JncO/9Z3Dv/2dw7/9ncO//Z3Dv/2dw7/1ncO/yZ3Dv1Gdw 262 | 75dncO9FZ3DvC2dw7wBncO8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 263 | AAAAAAAAAAAAAAAAAABncO8AZ3DvAGdw7wVncO8iZ3DvUGdw731ncO+dZ3DvrGdw76xncO+dZ3DvfWdw 264 | 71BncO8iZ3DvBWdw7wBncO8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/wAP//wAA//wA 265 | AD/4AAAf8AAAD+AAAAfAAAADwAAAA4AAAAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 266 | AAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAAHAAAADwAAAA+AAAAfwAAAP+AAAH/wAAD//AAD//8AD/ygA 267 | AAAwAAAAYAAAAAEAIAAAAAAAACQAAMIOAADCDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 268 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ3DvAGdw7wJncO8RZ3DvKmdw 269 | 70hncO9jZ3Dvdmdw74BocfGAXGXUdjxGjGM5QoFIOUKCKjlCghE5QoICOUKCAAAAAAAAAAAAAAAAAAAA 270 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 271 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ3DvAGdw7wFncO8VZ3DvRmdw 272 | 74JncO+1Z3Dv2Gdw7+tncO/1Z3Dv+mhw8PxhauL8Rk+i+jlCgvU5QoLrOUKC2DlCgrU5QoKCOUKCRjlC 273 | ghU5QoIBOUKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 274 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdw7wBncO8CZ3DvJGdw 275 | 73BncO+/Z3Dv7mdw7/5ncO//Z3Dv/2dw7/9ncO//Z3Dw/2Fq4v9GUKP/OUKB/zlCgv85QoL/OUKC/zlC 276 | gv85QoL+OUKC7jlCgr85QoJwOUKCJDlCggI5QoIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 277 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABncO8AZ3DvAGdw 278 | 7xlncO9wZ3Dvzmdw7/pncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ocPD/YWvi/0ZPov85QoH/OUKC/zlC 279 | gv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL6OUKCzjlCgnA5QoIZOUKCADlCggAAAAAAAAAAAAAA 280 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdw 281 | 7wBncO8FZ3DvRGdw77hncO/4Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw8P9hauL/Rk+i/zhB 282 | gf84QYL/OEGC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgvg5QoK4OUKCRDlC 283 | ggU5QoIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 284 | AABncO8AZ3DvAGdw7w1ncO9wZ3Dv4Wdw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dw/2Fq 285 | 4v9JUqP/QUqE/0RNhv9FTob/QUqF/zxFg/84QYL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC/zlC 286 | gv85QoL/OUKC4TlCgnA5QoINOUKCADlCggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 287 | AAAAAAAAAAAAAGdw7wBncO8AZ3DvFGdw74xncO/yZ3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw 288 | 7/9ncPD/aHHk/2hwrv9yeZb/fYSa/4CHnP+BiJz/fYSa/3J6lv9aYo3/P0iE/zhBgv85QoL/OUKC/zlC 289 | gv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgvI5QoKMOUKCFDlCggA5QoIAAAAAAAAAAAAAAAAAAAAAAAAA 290 | AAAAAAAAAAAAAAAAAAAAAAAAZ3DvAGdw7wBncO8UZ3DvlWdw7/hncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw 291 | 7/9ncO//Z3Dv/2dw8P9rdOX/foa1/4iPnv+KkZ//ipGf/4qRn/+KkZ//ipGf/4qRn/+Ij5//cnmW/0NM 292 | hv84QYL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL4OUKClTlCghQ5QoIAOUKCAAAA 293 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ3DvAGdw7w1ncO+MZ3Dv+Gdw7/9ncO//Z3Dv/2dw 294 | 7/9ncO//Z3Dv/2dw7/9ncO//Z3Dw/2Vu5P96grT/ipGe/4mQn/+KkaD/i5Kh/4uSof+LkqH/i5Kh/4qR 295 | oP+JkJ//ipGf/211lP88RYT/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC+DlC 296 | gow5QoINOUKCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABncO8AZ3DvBGdw73BncO/yZ3Dv/2dw 297 | 7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ocfH/X2fd/1pgnP+FjZz/i5Kh/4SLmf9zeob/Ymhy/1le 298 | Z/9ZXmf/Ymhx/3N5hv+Ei5n/i5Kh/4aNnf9JUHf/NT17/zlCg/85QoL/OUKC/zlCgv85QoL/OUKC/zlC 299 | gv85QoL/OUKC/zlCgvI5QoJwOUKCBDlCggAAAAAAAAAAAAAAAAAAAAAAAAAAAGdw7wBncO8AZ3DvRWdw 300 | 7+FncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2hx8f9eZ9j/NDhq/11icP+Hjpz/X2Vv/y4z 301 | N/8UFxj/Cg0N/wgLCv8ICwr/Cg0N/xQXGf8uMzf/X2Vu/4eOnP9YXGf/Gh84/zM7df85QoP/OUKC/zlC 302 | gv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoLhOUKCRTlCggA5QoIAAAAAAAAAAAAAAAAAZ3DvAGdw 303 | 7wBncO8ZZ3DvuGdw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//aHHw/2Bo3P8yNmT/IiUv/2lv 304 | e/9CRk3/Fxoc/x8jJf8uMjb/NzxA/zo/Q/86P0T/NzxA/y4yNv8fIyX/Fhob/0JGTf9ma3X/EhUW/xYb 305 | MP80PXf/OUKD/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKCuDlCghk5QoIAOUKCAAAA 306 | AAAAAAAAZ3DvAGdw7wFncO9wZ3Dv+Gdw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncPD/ZG3p/zk/ 307 | ef8ZHCb/KCs2/0BFTP9ARUv/a3F8/36Fk/+FjJr/iI+d/4iQnv+IkJ7/iI+d/4WMmv9/hZP/a3F8/0FG 308 | TP8+Q0n/GRwe/wgLCv8cIjz/N0B+/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC+DlC 309 | gnA5QoIBOUKCAAAAAABncO8AZ3DvAGdw7yRncO/OZ3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw 310 | 7/9ocfH/TFOp/x0gL/8ZHCf/HyIt/1RZY/+Hjpz/i5Kh/4qRoP+JkJ//iZCf/4mQn/+JkJ//iZCf/4mQ 311 | n/+KkaD/i5Kh/4ePnP9SWF//EBMU/wgLC/8LDhH/Jy5Z/zlCg/85QoL/OUKC/zlCgv85QoL/OUKC/zlC 312 | gv85QoL/OUKC/zlCgs45QoIkOUKCADlCggBncO8AZ3DvAGdw73BncO/6Z3Dv/2dw7/9ncO//Z3Dv/2dw 313 | 7/9ncO//Z3Dv/2dx8P9gaN7/Ky5T/xkcJv8ZHCf/Ky86/32Ekf+KkaD/iZCf/4mQn/+JkJ//iZCf/4mQ 314 | n/+JkJ//iZCf/4mQn/+JkJ//iZCf/4qRoP98go//HSEj/wgLC/8ICwv/Excm/zQ9d/85QoP/OUKC/zlC 315 | gv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgvo5QoJwOUKCADlCggBncO8AZ3DvFWdw779ncO//Z3Dv/2dw 316 | 7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2hx8f9JT6H/Gx4q/xodKP8YGyb/NjlF/4SLmv+JkJ//iZCf/4mQ 317 | n/+JkJ//iZCf/4mQn/+JkJ//iZCf/4mQn/+JkJ//iZCf/4mQn/+Ei5n/KS0w/wcKCv8JDAz/CQwN/yYs 318 | VP85Q4P/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoK/OUKCFTlCggBncO8AZ3DvRmdw 319 | 7+5ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dw/2Rs5v8wNF//GRwl/xodKP8ZGyb/MzZD/4OK 320 | mP+JkJ//iZCf/4mQn/+JkJ//iZCf/4mQn/+JkJ//iZCf/4mQn/+JkJ//iZCf/4mQoP+CiZf/Jiot/wcK 321 | Cv8JDAz/CAsK/xUaLf82P3z/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoLuOUKCRjlC 322 | ggBncO8BZ3DvgWdw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//aHHx/1dexP8gIzb/Gh0n/xod 323 | KP8ZHCf/KS04/3yDkP+KkaD/iZCf/4mQn/+JkJ//iZCf/4mQn/+JkJ//iZCf/4mQn/+JkJ//iZCf/4qR 324 | oP96gI7/Gx4h/wgLC/8JDAz/CQwL/wwPFP8uNmj/OkOD/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC/zlC 325 | gv85QoL/OUKCgTlCggFncO8RZ3DvtWdw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//aHHx/0VK 326 | lf8aHSf/Gh0o/xodKP8ZHCf/Ky45/3l/jP+KkaD/iZCf/4mQn/+JkJ//iZCf/4mQn/+JkJ//iZCf/4mQ 327 | n/+JkJ//iZCf/4qRoP9xdoL/Fxoc/wgLC/8JDAz/CQwM/wkMDP8iKU3/OUOD/zlCgv85QoL/OUKC/zlC 328 | gv85QoL/OUKC/zlCgv85QoL/OUKCtTlCghFncO8qZ3Dv2Gdw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw 329 | 7/9ncO//ZW7r/zQ4af8ZHCX/Gh0o/xodKP8aHSj/RUhU/3h9if+JkJ//iZCf/4mQn/+JkJ//iZCf/4mQ 330 | n/+JkJ//iZCf/4mQn/+JkJ//iZCf/4iPnv9jaHH/LzI3/woNDf8JDAz/CQwM/wgLCv8YHTL/OEF//zlC 331 | gv85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC2DlCgipncO9IZ3Dv62dw7/9ncO//Z3Dv/2dw 332 | 7/9ncO//Z3Dv/2dw7/9ocfD/X2fb/yYqR/8ZHCb/Gh0o/xkcJ/8lKDP/X2Jt/25yfv+DiZf/iZCf/4mQ 333 | n/+KkaD/goqX/4WMmv+FjJr/gomX/4qRoP+JkJ//ipGg/3yDkP9bYGn/WV1m/xcaHP8ICwv/CQwM/wkL 334 | C/8QFB7/Mzx2/zlCg/85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC6zlCgkhncO9jZ3Dv9Wdw 335 | 7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ocfL/Vl7D/x8iNP8aHSf/Gh0o/xkcJ/89QEv/am55/2pu 336 | ef91eob/iI+d/4mQnv9mbXj/LTM7/19lcP9fZXH/LjM8/2Zsef+JkJ//h46c/2xxfP9na3X/am55/zM3 337 | PP8ICwv/CQwM/wkMDP8LDxP/LTVo/zpDg/85QoL/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC9TlC 338 | gmNncO92Z3Dv+mdw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ocfL/TFOp/xseKv8aHSj/Gh0o/x4h 339 | LP9WWWT/a296/2puef9rb3r/e4GN/4iQnv9PVWD/QEdQ/3mAjf96gI7/QUZR/09VYP+Jj57/eX+L/2lt 340 | eP9qbnn/a296/1FVXf8OERL/CQwM/wkMDP8JDA7/KC5Z/zpDhP85QoL/OUKC/zlCgv85QoL/OUKC/zlC 341 | gv85QoL/OUKC+jlCgnZncO+AZ3Dv/Gdw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncPD/QEaK/xkc 342 | Jv8aHSj/GRwn/ywvOv9laXT/am55/2puef9qbnn/bHB7/32Dj/+FjJr/iI+e/4qRoP+KkaD/iI+e/4WM 343 | m/99g5D/bHB7/2puef9qbnn/am55/2Rocv8fIiX/CAsL/wkMDP8ICwv/IidK/zpDg/85QoL/OUKC/zlC 344 | gv85QoL/OUKC/zlCgv85QoL/OUKC/DlCgoBncO+AZ3Dv/Gdw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw 345 | 7/9VXsb/Ki9V/xkcJv8aHSj/GRwn/z1AS/9qbnn/am55/2tvev9obXf/aG13/2xxe/96gIz/h46c/4mQ 346 | oP+JkZ//h46c/3qAjP9scXz/aGx3/2hsd/9rb3r/am55/2puef8zNjz/CAsL/wkMDP8ICwr/HSI+/zlC 347 | g/85QoP/OUKC/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC/DlCgoBncO92Z3Dv+mdw7/9ncO//Z3Dv/2dw 348 | 7/9ncO//Z3Dv/1FZuf8tM2H/HSAy/xodJ/8aHSj/Gh0o/0lMV/9rb3r/am55/1NXYf8rMDj/LjM7/1hd 349 | Z/9rb3r/cXaC/3uBjv97gY3/cnaC/2tvev9YXWf/LjM7/yovOP9TV2H/am55/2tve/9CRUz/CQwM/wkM 350 | DP8MDxH/Gh0t/ysxWv81PXb/OUKD/zlCgv85QoL/OUKC/zlCgv85QoL/OUKC+jlCgnZncO9jZ3Dv9Wdw 351 | 7/9ncO//Z3Dv/2dw7/9ncO7/S1Kn/yImP/8aHCf/Gh0n/xodKP8aHSj/Gx0p/01RW/9scHv/ZGhz/yEm 352 | Lv8IDRP/CA0U/ykuNv9na3b/am55/2puef9qbnn/am55/2drdv8pLjf/CA0U/wgNE/8hJS7/Y2hz/2xw 353 | e/9HS1L/Cg0N/wwPEf8WGSP/Gh0o/xodKP8fIzf/LjVj/zlCgf85QoL/OUKC/zlCgv85QoL/OUKC9TlC 354 | gmNncO9IZ3Dv62dw7/9ncO//Z3Dv/2hx8f9QV7L/ICM3/xkcJv8aHSj/Gh0o/xodKP8aHSj/Gh0o/0dL 355 | Vv9scHv/YWVw/xofJ/8IDRT/CA0U/yElLv9laXT/am55/2puef9qbnn/am55/2VpdP8hJi7/CA0U/wgN 356 | FP8aHyb/YWVw/2xwe/9AQ0r/DA8R/xYZI/8aHSj/Gh0o/xodKP8aHSf/HB8v/y82Z/85QoP/OUKC/zlC 357 | gv85QoL/OUKC6zlCg0hncO8qZ3Dv2Gdw7/9ncO//Z3Dw/2Fp4P8sMFb/GRwl/xodKP8aHSj/Gh0o/xod 358 | KP8aHSj/GRwn/zU5RP9pbXj/aW14/0FFTv8WGiL/GB0k/0hMVv9qbnn/am55/2puef9qbnn/am55/2pu 359 | ef9ITVf/GB0l/xYaIv9ARU7/aW14/2hsd/8uMTj/FRgh/xodKP8aHSj/Gh0o/xodKP8aHSj/Ghwn/yEl 360 | Pv82P3v/OUKC/zlCgv85QoH/PkiQ2EtUrSpncO8RZ3DvtWdw7/9ncO//aHHy/1FZt/8dIC//Gh0o/xod 361 | KP8aHSj/Gh0o/xodKP8aHSj/Gh0o/x8iLv9TV2L/a296/2lteP9dYWv/XmJt/2lteP9qbnn/am55/2pu 362 | ef9qbnn/am55/2puef9pbnj/XmNt/11hbP9pbXj/bG97/1NWYf8eICr/Gh0o/xodKP8aHSj/Gh0o/xod 363 | KP8aHSj/Gh0o/xseK/8vN2n/OUOD/zhBgf9CS5j/WmPRtW11/BFncO8BZ3DvgWdw7/9ncO//aHHy/0VM 364 | l/8aHSf/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xkcJ/8pLDf/WFxn/2tuev9scHv/bHB7/2tv 365 | ev9rb3r/a296/2puef9qbnn/a296/2tvev9rb3r/bHB7/2xwe/9rb3r/WVxn/yksN/8ZHCf/Gh0o/xod 366 | KP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodJ/8rMVv/OUKC/0JLl/9eZ9n/aHHxgWlz9QFncO8AZ3DvRmdw 367 | 7+5ncO//aHHy/0VLlf8aHCb/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8ZHCf/JCYy/z9C 368 | Tf9QU17/VVhj/1JWYf9MT1v/Q0dR/zs+Sv88Pkr/Q0ZR/0xPWv9TVmH/VVhj/1BUX/8/Qk3/JCcy/xkc 369 | J/8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodJ/8pMFn/QkuZ/15n2v9ocPDuZ3DvRmdw 370 | 7wBncO8AZ3DvFWdw779ncO//aHHy/1BXtP8cHy7/Gh0n/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xod 371 | KP8aHSj/GRwn/xkcJ/8bHin/HSAr/xwfKv8aHSj/GRwn/xkcJ/8ZHCf/GRwn/xodKP8cHyr/HSAr/xse 372 | Kf8ZHCf/GRwn/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKf84P3z/Xmfb/2hw 373 | 8P9ncO+/Z3DvFWdw7wBncO8AZ3DvAGdw73BncO/6Z3Dw/2Jq4f8wNF7/GRwl/xodJ/8aHSj/Gh0o/xod 374 | J/8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xod 375 | KP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSf/GRwl/yww 376 | Vv9cZNP/aHHx/2dw7/pncO9wZ3DvAGdw7wBncO8AZ3DvAGdw7yRncO/OZ3Dv/2hx8f9ZYcv/MDRf/xwg 377 | Lv8aHSf/Gx4p/x0gMP8aHSn/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xod 378 | KP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8cHy7/Gx0q/xoc 379 | KP8dHy7/LzRf/1lgyf9ocfH/Z3Dv/2dw785ncO8kZ3DvAGdw7wAAAAAAZ3DvAGdw7wFncO9wZ3Dv+Gdw 380 | 7/9ocfH/Ymvi/1FZtv9HTpz/S1Km/1Nauv8wM1//GRwm/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xod 381 | KP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/GRwm/ygs 382 | Tv9NVK7/TFKm/0dOnP9RWLX/Ymri/2hx8f9ncO//Z3Dv+Gdw73BncO8BZ3DvAAAAAAAAAAAAZ3DvAGdw 383 | 7wBncO8ZZ3DvuGdw7/9ncO//Z3Dw/2hx8v9ocfL/aHHy/2ly8/9YX8f/JilG/xkcJf8aHSj/Gh0o/xod 384 | KP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xod 385 | KP8ZHCb/JShD/1Nbvv9ocfL/aHHy/2hx8v9ocfL/Z3Dw/2dw7/9ncO//Z3DvuGdw7xlncO8AZ3DvAAAA 386 | AAAAAAAAAAAAAGdw7wBncO8AZ3DvRWdw7+FncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ocPH/Ulq5/yUp 387 | Rf8ZHCX/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xod 388 | KP8aHSj/Gh0o/xkcJf8lKUT/Ulm4/2dx8P9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO/hZ3DvRWdw 389 | 7wBncO8AAAAAAAAAAAAAAAAAAAAAAAAAAABncO8AZ3DvBGdw73BncO/yZ3Dv/2dw7/9ncO//Z3Dv/2dw 390 | 7/9ncO//Z3Hw/1dexf8vM17/Gx4q/xkcJv8aHSj/Gh0o/xodKP8aHSj/Gh0o/xodKP8aHSj/Gh0o/xod 391 | KP8aHSj/Gh0o/xodKP8ZHCb/Gx4p/y8zXf9XXsT/Z3Dw/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw 392 | 7/JncO9wZ3DvBGdw7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ3DvAGdw7w1ncO+MZ3Dv+Gdw 393 | 7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2hx8f9hauD/Rk2Z/youUP8cHy3/GRwl/xkcJf8ZHCb/Gh0n/xod 394 | J/8aHSf/Gh0n/xkcJv8ZHCX/GRwl/x0fLf8qLlH/Rk2a/2Fq4P9ocfH/Z3Dv/2dw7/9ncO//Z3Dv/2dw 395 | 7/9ncO//Z3Dv+Gdw74xncO8NZ3DvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ3DvAGdw 396 | 7wBncO8UZ3DvlWdw7/hncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncPD/aHHw/2Bp3f9PVrD/O0F9/y0x 397 | WP8lKEL/ICM4/x8iM/8fIjP/ICM4/yQnQv8sMFf/PEF+/09WsP9gaN3/aHHx/2dw8P9ncO//Z3Dv/2dw 398 | 7/9ncO//Z3Dv/2dw7/9ncO/4Z3DvlWdw7xRncO8AZ3DvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 399 | AAAAAAAAAAAAAGdw7wBncO8AZ3DvFGdw74xncO/yZ3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw 400 | 8P9ocfL/Z3Dv/2Ns5f9eZtf/WWDK/1Zdwv9WXcL/WGDK/15m1v9jbOX/Z3Dv/2hx8v9ncPD/Z3Dv/2dw 401 | 7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/JncO+MZ3DvFGdw7wBncO8AAAAAAAAAAAAAAAAAAAAAAAAA 402 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABncO8AZ3DvAGdw7w1ncO9wZ3Dv4Wdw7/9ncO//Z3Dv/2dw 403 | 7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw8P9ocfH/aHHx/2hx8v9ocfL/aHHx/2hx8f9ncPD/Z3Dv/2dw 404 | 7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv4Wdw73BncO8NZ3DvAGdw7wAAAAAAAAAAAAAA 405 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdw7wBncO8FZ3DvRGdw 406 | 77hncO/4Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw 407 | 7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/hncO+4Z3DvRGdw7wVncO8AAAAAAAAA 408 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 409 | AABncO8AZ3DvAGdw7xlncO9wZ3Dvzmdw7/pncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw 410 | 7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO/6Z3Dvzmdw73BncO8ZZ3DvAGdw 411 | 7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 412 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGdw7wBncO8CZ3DvJGdw73BncO+/Z3Dv7mdw7/5ncO//Z3Dv/2dw 413 | 7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO//Z3Dv/2dw7/9ncO/+Z3Dv7mdw779ncO9wZ3DvJGdw 414 | 7wJncO8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 415 | 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 908 | 909 | 910 | --------------------------------------------------------------------------------