Предположим, у меня есть огромный .txt-файл, полный случайных символов, и я хочу узнать «редкие». Есть ли какой-нибудь модуль (что-то вообще, на самом деле) в Python (возможно, версия 3.x, но у меня также есть машина, использующая Python 2.7, если она лучше), написанная для этой цели? В случае положительного ответа, где я могу найти основное объяснение его функционирования? спасибо.Найти редких персонажей с Python
ответ
from collections import Counter
c = Counter("text")
print(c.most_common())
выход
[('t', 2), ('e', 1), ('x', 1)]
ОП запросил редкие, не самые распространенные. – Duncan
@ Duncan просто отменил список. –
@ Duncan Они равны, просто разные порядки. –
d = {}
for c in open(filename, "r").read():
if c in d:
d[c] += 1
else:
d[c] = 1
print(d)
Затем вы можете использовать d
для поиска минимальных букв.
Вот один из способов сделать это, используя словарь Counter
. Он печатает редкие символы вместе с их количеством вхождений. Мы определяем редкий символ, который является числом, число вхождений которого меньше определенного порогового значения, которое представляет собой среднее число случаев, умноженное на весовой коэффициент, который я установил в этом примере равным 0,5.
from collections import Counter
with open(fname, 'r') as f:
text = f.read()
counter = Counter(text)
mean = len(text)/len(counter)
print('Mean:', mean)
weight = 0.5
thresh = mean * weight
print('Threshold:', thresh)
#Only print results for chars whose occurence is less than the threshold
for ch, count in reversed(counter.most_common()):
if count <= thresh:
print('{0!r}: {1}'.format(ch, count))
else:
break
Если это фактический текстовый файл, вы можете отфильтровать определенные символы, например, строки и пробелы.
Использование опции collections
для доступа к п наименьшее общее элементы c.most_common()[:-n-1:-1]
from collections import Counter
c = Counter("sadaffdsagfgdfaafsasdfs3213jlkjk22jl31j2k13j313j13")
res = c.most_common()[:-3-1:-1]
print "The 3 Rarest characters are:",res[0][0],",",res[1][0],"and",res[2][0]
Результат:
The 3 Rarest characters are: l , g and k
почему сортировка отсортированного списка? –
Я сортирую по численному значению вхождения, а не по алфавиту. –
1- '.most_common()' уже возвращает пары, отсортированные по количеству вхождений, например: '.most_common() [- 1]' - самый редкий символ - не нужно вызывать дополнительные 'sort()', чтобы получить 2 редких персонажа. 2- вы можете использовать 'operator.itemgetter (1)' вместо определения функции {возникновения}() '3-3, все ваши строки являются байтами. Вы должны использовать Unicode при обработке текста. 4- ['heapq.nsmallest()' может быть более эффективным, чем вызов '.most_common()] (http://stackoverflow.com/a/35799656/4279) – jfs
Чтобы найти 10 редчайшие символов в тексте:
from collections import Counter
rarest_chars = Counter(text).most_common()[-10:]
«характер «здесь означает код Unicode для простоты: это означает "a"
и "A"
считаются разными. Это означает, что u'g̈'
(U + 0067 U + 0308) считается двумя символами. Посмотрите, как эти проблемы обрабатываются по соответствующему вопросу: Most common character in a string.
counter.most_common()[-10:]
может быть написано более эффективен, используя heapq.nsmallest(10, counter.items(), key=itemgetter(1))
: .items()
возвращает пару (character, its_count)
и key=itemgetter(1)
извлекают отсчеты так, чтобы 10
пара с наименее подсчетами возвращается.
- 1. Используя substr, чтобы найти близлежащих персонажей
- 2. Левенштейн расстояние с скремблированием персонажей?
- 3. Где я могу найти персонажей прототетических?
- 4. Анимация персонажей с металлом
- 5. Проблемы с корпусом персонажей
- 6. Классификация редких данных
- 7. СЭД редких-разделители (кроме & |?/...)
- 8. Реализация чрезвычайно редких массивов
- 9. Ловля редких ошибок
- 10. найти наибольшее значение в массиве, однако с присвоенными номерами персонажей
- 11. экстракт персонажей из образа
- 12. Python падает в редких случаях при запуске кода - как отлаживать?
- 13. Laravel 5: проблема с методом редких списков
- 14. Модель Django для редких данных
- 15. Эффективный способ очистки редких входов
- 16. email.header не обрабатывает финских персонажей?
- 17. Решение общих редких линейных систем в CUDA
- 18. Анимация персонажей с костями для AS3
- 19. Создание простых персонажей игра
- 20. String.replaceAll для нескольких персонажей
- 21. Замена персонажей одновременно
- 22. Анимация персонажей в xaml
- 23. Элементы персонажей игры LibGDX
- 24. Эффективно накапливается коллекция редких scipy-матриц
- 25. Юникод персонажей в категории Jekyll
- 26. MongoDb Поиск Акцентированных персонажей
- 27. метабал-подобная анимация персонажей
- 28. Удалить персонажей после появления "."
- 29. istream не потребляет персонажей?
- 30. C: Обмен персонажей
От _rare ones_ вы имели в виду низкий показатель? – JRodDynamite
Это может быть слишком много, но вы можете использовать scipy модуль для проведения статистического анализа. Я не использую его сам, но насколько я знаю, он должен содержать функциональные возможности, которые вам нужны. И он работает нормально с python 3.x и 2.x. –
@Jason: Jeah, на самом деле я имею в виду что-то вроде: их (среднее) количество вхождений (значительно) ниже, чем у другого. Спасибо за прочтение! – EM90