Слова для разбора слова по составу 5 класс: Карточки для проверочной работы по теме «Разбор слова по составу» (5 класс)

python — Функция для разбора слов из строки без использования пробелов

Задать вопрос

спросил

Изменено 7 лет, 6 месяцев назад

Просмотрено 2к раз

\$\начало группы\$

Я пытаюсь разобрать слова из сильно искаженного текстового файла, который содержит много повторов. Он имеет длину около 100 тыс. символов и был сформирован путем объединения множества подстрок в алфавитном порядке.

Меня интересуют другие методы поиска слов без использования пробелов.

 по определению unique_words (строка):
    слова = дикт()
    p1 = 0 # Позиция среза строки 1
    p2 = 1 # Позиция среза строки 2
    len_string = len(строка)
    в то время как p2 < len_string:
        р2 += 1
        sub1 = string[p1:p2] # Более короткая подпрограмма
        sub2 = string[p1:(p2 + 1)] # Более длинный вложенный элемент
        sub1_count = string.
count(sub1) # Подсчитывает частоту более короткого сабвуфера sub2_count = string.count(sub2) # Подсчитывает частоту более длинного сабвуфера if sub2_count * len(sub2) < sub1_count * len(sub1): # Истинно, если частота sub1 * его длина больше words[sub1] = ('') # Добавить р1 = р2 обратные слова

Приведенный выше код работает, когда количество уникальных слов мало, но не работает, когда оно велико. Я использовал веб-сайт TextMechanic для генерации случайной строки, например

 'вверх внизвлевовнизвнизвлевовверхвлевовправовнизвлевовверх'
 

, и приведенный выше код возвращает словарь точно так, как нужно:

 {'вверх': '', 'вниз': '', 'влево': '', 'вправо': ''}
 

Вот проблема:

Когда количество уникальных слов увеличивается, существует точка, в которой появление одиночных букв приводит к общему количеству символов любого слова в строке.

Мое текущее решение использует алгоритм на коротких фрагментах исходной строки, но это требует проб и ошибок и содержит артефакты.

  • питон
  • строки
  • разбор

\$\конечная группа\$

3

\$\начало группы\$

Отказ от ответственности: я не совсем уверен, как это должно работать, и, насколько я могу судить, приведенный вами пример неверен. Действительно, у меня нет «правильно» в выводе. Я попробую дать вам несколько советов в любом случае.

Используйте соответствующий тип

Вы сохраняете подстроки в словаре с бесполезным связанным значением. Похоже, вы хотите использовать набор

.

 слов = установить()
...
слова.добавить(sub1)
 

Не используйте в то время как , когда для делает свое дело len_string = len(строка) в то время как p2 < len_string: р2 += 1 ... то, что не меняет p2

можно использовать:

 для p2 в диапазоне (2, 1+len(строка)):
    . .. то, что не меняет p2
 

Для последнего легко увидеть различные значения, которые примет p2 . Это также более лаконично и более идиоматично.

Кроме того, я предполагаю, что вы делаете одну бессмысленную итерацию в конце. Действительно, у вас sub1 == sub2 и дальше в принципе ничего не происходит. Я бы не удивился, если бы:

 для p2 в диапазоне (2, len (строка)):
 

был более правильным. Кроме того, мой инстинкт подсказывает мне, что начинать с 1 не так уж и глупо, но у меня нет для этого веских причин.

\$\конечная группа\$

\$\начало группы\$

Вы должны дать своим переменным более подходящие имена. Например, хотя вы можете знать, что делает переменная p1 или p2 , люди, читающие ваш код, этого не знают. Присвоение вашим переменным лучших имен также снижает потребность во встроенных комментариях, таких как # String slice position 2 .

Вместо использования функции dict для инициализации пустого словаря вы можете просто ввести следующее: words = {} .

Наконец, вам не нужны круглые скобки вокруг '' в words[sub1] = ('') . Его можно изменить на следующее: слов[sub1] = ''

.

\$\конечная группа\$

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Обязательно, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie

.

JavaScript 2.0 Лексер

JavaScript 2.0 Лексер

Апрель 2002 г. Проект

JavaScript 2.0

Базовый язык

Лексер

Понедельник, 26 ноября 2001 г.

В этом разделе представлен неофициальный обзор лексера JavaScript 2.0. Посмотреть этапы и разделы лексической семантики в формальном описании главу для подробностей.

Изменения по сравнению с JavaScript 1.5

Лексер JavaScript 2.0 ведет себя так же, как лексер JavaScript 1.5, за исключением следующего:

  • Есть дополнительные знаки препинания и зарезервированные слова.
  • Лексер распознает несколько незарезервированных слов, которые имеют особое значение в некоторых контекстах, но могут использоваться в качестве идентификаторов.
  • За цифрами могут следовать единицы измерения.
  • Лексер обрабатывает только вставку точки с запятой в разрывы строк; синтаксический анализатор JavaScript 2.0 позволяет опускать точки с запятой до закрытия } . Кроме того, синтаксический анализатор JavaScript 2.0 позволяет использовать точку с запятой. опущен перед оператором else оператора if - else и перед в то время как из делают - в то время как заявление.
  • Вставка точки с запятой на разрывах строк отключена в строгом режиме.
  • [без разрыва строки] ограничения в грамматических постановках игнорируются в strict режим.

Исходный код

Исходный текст JavaScript 2.0 состоит из последовательности версии Unicode UTF-16 2.1 или более поздние символы, нормализованные к Unicode Normalized Form C (каноническая композиция), как описано в Unicode Технический отчет №15.

Комментарии и пробелы

Комментарии и пробелы ведут себя так же, как в JavaScript 1.5.

Пунктуаторы

Следующие токены пунктуации JavaScript 1.5 распознаются в JavaScript 2.0:

!   !=   !== %   %=   и &&   &=   ( ) * *= +   ++   += , - - -=

  .   / 9=   ||=

Ключевые слова

Следующие зарезервированные слова используются в JavaScript 2.0:

абстрактный   как   перерыв корпус   улов   класс const   продолжить   по умолчанию удалить   сделать   еще экспорт   расширяет   ложь окончательный   окончательный   для функция   если   реализует импорт   в   экземпляр интерфейс   это пространство имен   новое   пустое пакет   частный   общедоступный возврат   статический

  супер переключатель   это   бросок верно   попытка   тип использовать   var   недействительно в то время как   с

Следующие зарезервированные слова зарезервированы для расширения в будущем:

отладчик   enum   перейти к реализует   интерфейс собственный   защищенный   синхронизированный бросает   переходный   изменчивый

Следующие слова имеют особое значение в некоторых контекстах JavaScript 2. 0, но не зарезервированы и могут использоваться как идентификаторы:

исключить   получить

  включить названный   набор

Любое из приведенных выше ключевых слов можно использовать в качестве идентификатора, включив escape-последовательность \_ в любом месте идентификатора, что лишает его любых значений ключевых слов. Двух- и четырехзначные шестнадцатеричные escape-последовательности \x dd и дддд также может использоваться в идентификаторах; они также лишают идентификатор любых значений ключевых слов.

Отличия от JavaScript 1.5

Следующие слова были зарезервированы в JavaScript 1.5, но не зарезервированы в JavaScript 2.0:

логическое значение байт символ двойной плавающий целочисленный длинный   короткий

Следующие слова не были зарезервированы в JavaScript 1. 5, но зарезервированы в JavaScript 2.0:

как   равно   пространство имен использование

Вставка точки с запятой

Синтаксическая грамматика JavaScript 2.0 явно делает точки с запятой необязательными в следующих ситуациях:

  • Перед любым }
  • Перед иначе из если - иначе заявление
  • Перед в то время как из сделать - в то время как оператор (но не перед , а оператора в то время как )
  • До окончания программы

В таких ситуациях точки с запятой необязательны, даже если они создают пустые операторы. Строгий mode не влияет на вставку точки с запятой в вышеуказанных случаях.

Кроме того, иногда разрывы строк во входном потоке превращаются в токены VirtualSemicolon. В частности, если первые n th токены формы программы JavaScript грамматически допустимы но с первого по n +1 st токенов нет и есть разрыв строки (или комментарий, включающий строку break) между токенами n th и токенами n +1 st , то синтаксический анализатор пытается разобрать программа снова после вставки токена VirtualSemicolon между n th и токены n +1 st . Этот тип вставки VirtualSemicolon не происходит в строгом режиме.

См. также обоснование синтаксиса вставки точки с запятой.

Литералы регулярных выражений

Литералы регулярных выражений начинаются с символа косой черты ( / ), за которым сразу не следует еще одна косая черта (два слэши начинают строчный комментарий). Как и в JavaScript 1.5, литералы регулярных выражений неоднозначны с делением ( / ) или деление-назначение ( /= ) токены. Лексер обрабатывает / или /= как деление или присваивание деления. токен, если любой из этих токенов будет разрешен синтаксической грамматикой в ​​качестве следующего токена; в противном случае лексер обрабатывает / или /= как начало регулярного выражения.

Эта досадная зависимость лексического разбора от грамматического разбора унаследована от JavaScript 1.5. Видеть обоснование синтаксиса регулярного выражения для обсуждения вопросы.

Единицы

Если за числовым литералом сразу следует идентификатор, лексер преобразует идентификатор в строковый литерал. Затем синтаксический анализатор обрабатывает число и строку как единичное выражение. Идентификатор не может начинаться со знака подчеркивания, но есть нет ограничений на зарезервированные слова для идентификатора; любой идентификатор, начинающийся с буквы, будет работать, даже если он зарезервирован слово.

Например, 3 дюйма преобразуется в 3 дюйма . 5xena преобразуется в 5 "xena" . С другой стороны, 0xena преобразуется в 0xe "na" . Неразумно определять имена юнитов, которые начинаются с буквами e или E либо отдельно, либо с последующей десятичной цифрой, или x или X за которым следует шестнадцатеричная цифра из-за потенциальных неоднозначностей с экспоненциальной или шестнадцатеричной нотацией.

admin

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *