@Override
	public NameData[] getNameData() {
		
		int length = crawledData.length;
		updateStatus(length, 0, 0, 0);		
		
		if(length == 0) return null;
		
		for(int i = 0; i < length; i++) {
			
			cd = crawledData[i];
			
			// Für jedes crawledData wird neu angefangen nach Künstlern zu suchen.
			foundNameIDs.clear();
			cachedOneNameIDs.clear();
			
			String[] textBlocks = cd.getTextBlocks();
			for(int t = 0; t < textBlocks.length; t++) {
				
				String text = textBlocks[t];
				
				if(text.length() == 0) continue;
				
				tokens.clear();
				tokens.add("");
				tokens.add("");
				perPos.clear();
				
				String taggedText = classifier.classifyWithInlineXML(text);
				
				// Alle Satzzeichen, auf denen das folgende Wort großgeschrieben sein könnte abrücken.
				taggedText = rPuncts.matcher(taggedText).replaceAll(" $0 ");
				
				Matcher m = rSplit.matcher(taggedText);
				while(m.find()) {
					
					// Anführungszeichen am Anfang oder Ende entfernen.
					String token = rQuotes.matcher(m.group()).replaceAll("");
					
					if(rTags.matcher(token).matches()) {
						if(token.contains("<I-PER>")) {
							token = token.replace("<I-PER>", "");
							token = token.replace("</I-PER>", "");
							token = rPuncts2.matcher(token).replaceAll("");
							token = rTwoNames.matcher(token).replaceAll("$1 $2");
							perPos.add(tokens.size());
						}
						else {
							token = "";
						}
					}
					
					tokens.add(token);
				}
				
				// Namen mit DB vergleichen.
				findNamesInDB();
				
				// Vor Namen nach Künstler-Bezeichnung suchen.
				findNamesByTitle();
				
				// Restlichen getaggten Namen entfernen.
				removeRemainingTokens();
				
				// Restlichen Wörter nach Namen durchsuchen.
				searchRemainingWords();
				
				updateStatus(length, i+1, textBlocks.length, t+1);
			}
			
		}
		
		return foundNames.toArray(new NameData[foundNames.size()]);
	}