Эта же функция есть в ссылке на Mako212, хотя я хочу дать некоторые пояснения, поскольку иногда я использую этот пакет, он может быть весьма полезен. Мы будем использовать функцию levenshteinSim()
из пакета RecordLinkage
.
Пакет:
install.packages("RecordLinkage")
library(RecordLinkage)
Найдите эти 90% совпадения:
data <- c("tcgartyu", "tcgart", "tckael", "tcgatcgatc", "tcgatcgatcg")
[1] "tcgartyu" "tcgart" "tckael" "tcgatcgatc" "tcgatcgatcg"
matches <- levenshteinSim('tcgatcgatcga', data)
[1] 0.42 0.42 0.25 0.83 0.92
matches_90 <- matches > 0.9
[1] FALSE FALSE FALSE FALSE TRUE
Так что с помощью этой функции вы сможете получить строки, которые соответствуют 90% (или больше, как в моем примере). Затем вы можете использовать эти% совпадения так, как вы хотели.
Обратите внимание, что аргументы str1
и str2
из функции levenshteinSim()
должны быть символьными векторами.
Для получения дополнительной информации посетите https://cran.r-project.org/package=RecordLinkage .
Вам необходимо зафиксировать как std out, так и std err в процессе. Затем вы можете записать std в файл / почту или подобное.
См. эту статью для получения дополнительной информации и, в частности, обратите внимание на механизм StreamGobbler
, который захватывает stdout / err отдельно потоки. Это важно для предотвращения блокировки и является источником множества ошибок, если вы не сделаете это правильно!
Используйте ProcessBuilder . После вызова start () вы получите объект Process , из которого вы можете получить потоки stderr и stdout.
ОБНОВЛЕНИЕ: ProcessBuilder дает вам больше контроля; Вам не обязательно использовать его, но я считаю, что в конечном итоге это проще. Особенно возможность перенаправить stderr на stdout, что означает, что вам нужно отсосать только один поток.
Runtime.exec () возвращает объект Process, из которого вы можете извлечь вывод любой выполненной команды.
Использование Runtime.exec дает вам процесс. Вы можете использовать getInputStream , чтобы получить стандартный вывод этого процесса, и поместить этот входной поток в String, например, через StringBuffer.
Use Plexus Utils, it is used by Maven to execut all external processes.
Commandline commandLine = new Commandline();
commandLine.setExecutable(executable.getAbsolutePath());
Collection<String> args = getArguments();
for (String arg : args) {
Arg _arg = commandLine.createArg();
_arg.setValue(arg);
}
WriterStreamConsumer systemOut = new WriterStreamConsumer(console);
WriterStreamConsumer systemErr = new WriterStreamConsumer(console);
returnCode = CommandLineUtils.executeCommandLine(commandLine, systemOut, systemErr, 10);
if (returnCode != 0) {
// bad
} else {
// good
}