@Override
  public List<String> tokenise(String text) {

    if (Objects.isNull(text) || text.isEmpty()) {
      return new ArrayList<>();
    }

    List<String> tokens = new ArrayList<>();
    text = text.replaceAll("[^\\p{L}\\p{N}\\s\\-'.]", " ").trim();

    String[] parts = text.split("\\s+");

    for (int i = 0; i < parts.length - 1; i++) {
      tokens.add(parts[i] + " " + parts[i + 1]);
    }

    tokens.addAll(Arrays.asList(parts));
    return tokens;
  }
@Description("Tokenise, when text only has one word but lots of other random character, then return one word")
  @Test
  void tokenise_WhenTextOnlyHasOneWordButLotsOfRandomCharacters_ThenReturnOneToken() {

    // When
    var result = textTokeniser.tokenise(",!!!Dallas%&^^");

    // Then
    assertThat(result).isNotEmpty().hasSize(1).contains("Dallas");
  }