public TokenInfoDictionary buildDictionary(List<File> csvFiles) throws IOException {
		TokenInfoDictionary dictionary = new TokenInfoDictionary(10 * 1024 * 1024);

		for (File file : csvFiles){
			FileInputStream inputStream = new FileInputStream(file);
			InputStreamReader streamReader = new InputStreamReader(inputStream, encoding);
			BufferedReader reader = new BufferedReader(streamReader);

			String line = null;
			while ((line = reader.readLine()) != null) {
				String[] entry = CSVUtil.parse(line);
				if(entry.length < 13) {
					System.out.println("Entry in CSV is not valid: " + line);
					continue;
				}
				int next = dictionary.put(formatEntry(entry));

				if(next == offset){
					System.out.println("Failed to process line: " + line);
					continue;
				}

				dictionaryEntries.put(offset, entry[0]);
				offset = next;

				// NFKC normalize dictionary entry
				if (normalizeEntries) {
					if (entry[0].equals(Normalizer.normalize(entry[0], Normalizer.Form.NFKC))){
						continue;
					}
					String[] normalizedEntry = new String[entry.length];
					for (int i = 0; i < entry.length; i++) {
						normalizedEntry[i] = Normalizer.normalize(entry[i], Normalizer.Form.NFKC);
					}

					next = dictionary.put(formatEntry(normalizedEntry));
					dictionaryEntries.put(offset, normalizedEntry[0]);
					offset = next;
				}
			}
		}

		return dictionary;
	}