Существует ли хорошая библиотека, может обнаружить и разделить слова от объединенной строки?
Пример:
"cdimage" -> ["cd", "image"]
"filesaveas" -> ["file", "save", "as"]
Вот динамическое программирование (реализуется как метеорезированная функция). Учитывая словарь слов со своими частотами, он разделяет входной текст на позициях, которые дают в целом, скорее всего, фразе. Вам придется найти настоящий слов, но я включил некоторые предположенные частоты для простого теста.
WORD_FREQUENCIES = {
'file': 0.00123,
'files': 0.00124,
'save': 0.002,
'ave': 0.00001,
'as': 0.00555
}
def split_text(text, word_frequencies, cache):
if text in cache:
return cache[text]
if not text:
return 1, []
best_freq, best_split = 0, []
for i in xrange(1, len(text) + 1):
word, remainder = text[:i], text[i:]
freq = word_frequencies.get(word, None)
if freq:
remainder_freq, remainder = split_text(
remainder, word_frequencies, cache)
freq *= remainder_freq
if freq > best_freq:
best_freq = freq
best_split = [word] + remainder
cache[text] = (best_freq, best_split)
return cache[text]
print split_text('filesaveas', WORD_FREQUENCIES, {})
--> (1.3653e-08, ['file', 'save', 'as'])
Существуют инструменты для преобразования сборки .NET в автономный исполняемый файл или библиотеку, чтобы клиентам не требовалась рамка .NET. Это также в некоторой степени защищает ваш код от обратного проектирования - вы не можете использовать Reflector для просмотра источника .NET в собственном двоичном файле.
См., например, Remotesoft Salamander .NET Protector .
Но, это не строго C # - > native; Salamander преобразует MSIL в собственный код.
С другой стороны, существует по крайней мере один академический проект по созданию собственного компилятора C # - > с использованием LLVM, называемого LLVM #.
-121--1858960-Иногда мы любим использовать объекты в качестве словарных ключей
Для чего стоит, кортежи недавно (2,6 +) выросли index ()
и count ()
методы
Я не знаю никакой библиотеки для него, но это не должно быть трудно реализовать базовую функциональность.
слов UNIX
. Пример:
Если вы не делаете это для удовольствия, но на самом деле делают что-то для работы и т. Д., Мой совет должен решать это на источнике. Почему у вас есть эти строки в сочетании? Где вы взяли эти строки? Если это возможно, вставьте пробелы в источнике, откуда эти строки.
Не знаю ни одной библиотеки, которая бы это делала, но написать не так уж и сложно, если у вас есть список слов:
wordList = file('words.txt','r').read().split()
words = set( s.lower() for s in wordList )
def splitString(s):
found = []
def rec(stringLeft, wordsSoFar):
if not stringLeft:
found.append(wordsSoFar)
for pos in xrange(1, len(stringLeft)+1):
if stringLeft[:pos] in words:
rec(stringLeft[pos:], wordsSoFar + [stringLeft[:pos]])
rec(s.lower(), [])
return found
Это вернет все возможные способы разбиения строки на заданные слова.
Example:
>>> splitString('filesaveas')
[['file', 'save', 'as'], ['files', 'ave', 'as']]
Заставьте людей решать их в виде капчи на вашем сайте :)
.