Я использую библиотеку машинного обучения на Java. Библиотека предоставляет метод с именем readInstances для ввода данных, предварительной обработки и их классификации. Для своих параметров readInstances принимает FileReader, Pattern и индексный массив для позиций полей в каждом наблюдении:
readInstances(FileReader file, Pattern lineRegex, int[] fieldIndices)
.
Через lineRegex библиотека обнаруживает поля, разделенные вкладками. В некоторых полях могут быть пробелы. Кроме того, ни в одном из полей нет вкладки.
Для нашего конкретного проекта каждая запись (наблюдение данных) имеет 17 полей и имеет следующий формат:
"19 инженерных ложно верно Алиса Элис Смит 13168 ком ложно NA 14972 13:36 NA 10 10 30 У вашей компании есть проблемы с мобильными приложениями."
Обратите внимание, что в шестом столбце указано «Алиса Смит», где Алиса и Смит разделены пробелом. 17-й столбец / поле содержит предложение, в котором существует несколько пробелов.
Я написал следующий объект Pattern в readInstances:
String partialPattern="";
for(int i=0; i<17;i++) {
partialPattern+="([^\\t]*)"+"\\t*";
}
Pattern lineRegex = Pattern.compile("^" + partialPattern + "(.*)$");
Регулярное выражение работает нормально. Но я надеюсь, что кто-то сможет пролить свет на то, как написать элегантное регулярное выражение, не обращаясь к конкатенации строк, через переменную «частичный_паттерн».
Обратите внимание:
- str.split () не является решением. Поэтому любое такое предложение не поможет.
- Исходный код для readInstances не может быть изменен.
- Объект Pattern должен быть передан методу readInstances.