Python: Разделение unicode представляет в виде строки на границах слова

Если Вы Знаток пользователь, обычно плагин блока делает то, что Вы хотите, или потенциально плагин оттенка, и в некоторых случаях комбинация.

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

mvn assembly:assembly

Или если у Вас есть более специальные вещи иметь дело с, одна из других целей. Все файлы JAR для включения, взяты преобразователем зависимости Знатока. При использовании плагина оттенка это обычно - часть цели установки, и в одном конкретном проекте я делаю теперь, я делаю

mvn install
mvn assembly:single

assembly:single, цель состоит в том, чтобы работать вокруг пожизненных проблем, в этом случае в приложение Spring .

10
задан tchrist 29 March 2012 в 18:23
поделиться

7 ответов

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

Это значит, что они привыкли к трактовке «разделить пространство и добавить… в конце».

Итак, я '

1
ответ дан 3 December 2019 в 20:42
поделиться

флаг re.U будет обрабатывать \ s в соответствии с базой данных свойств символов Unicode.

Однако данная строка , по-видимому, не содержит никаких пробелов в соответствии с базой данных unicode python:

>>> x = u'\u7b80\u8baf\uff1a\u65b0\u83ef\u793e\u5831\u9053\uff0c\u7f8e\u570b\u7e3d\u7d71\u5967\u5df4\u99ac\u4e58\u5750\u7684\u300c\u7a7a\u8ecd\u4e00\u865f\u300d\u5c08\u6a5f\u665a\u4e0a10\u664242\u5206\u9032\u5165\u4e0a\u6d77\u7a7a\u57df\uff0c\u9810\u8a08\u7d0430\u5206\u9418\u5f8c\u62b5\u9054\u6d66\u6771\u570b\u969b\u6a5f\u5834\uff0c\u958b\u5c55\u4ed6\u4e0a\u4efb\u5f8c\u9996\u6b21\u8a2a\u83ef\u4e4b\u65c5\u3002'
>>> re.compile(r'\s+', re.U).split(x)
[u'\u7b80\u8baf\uff1a\u65b0\u83ef\u793e\u5831\u9053\uff0c\u7f8e\u570b\u7e3d\u7d71\u5967\u5df4\u99ac\u4e58\u5750\u7684\u300c\u7a7a\u8ecd\u4e00\u865f\u300d\u5c08\u6a5f\u665a\u4e0a10\u664242\u5206\u9032\u5165\u4e0a\u6d77\u7a7a\u57df\uff0c\u9810\u8a08\u7d0430\u5206\u9418\u5f8c\u62b5\u9054\u6d66\u6771\u570b\u969b\u6a5f\u5834\uff0c\u958b\u5c55\u4ed6\u4e0a\u4efb\u5f8c\u9996\u6b21\u8a2a\u83ef\u4e4b\u65c5\u3002']
3
ответ дан 3 December 2019 в 20:42
поделиться

Сохраните два символа и используйте эллипсис (, 0x2026 ) вместо трех точек!

-1
ответ дан 3 December 2019 в 20:42
поделиться

Это подбрасывает решение о разбиении слов на модуль re, но оно может работать достаточно хорошо для вас.

import re

def shorten(tweet, footer="", limit=140):
    """Break tweet into two pieces at roughly the last word break
    before limit.
    """
    lower_break_limit = limit / 2
    # limit under which to assume breaking didn't work as expected

    limit -= len(footer)

    tweet = re.sub(r"\s+", " ", tweet.strip())
    m = re.match(r"^(.{,%d})\b(?:\W|$)" % limit, tweet, re.UNICODE)
    if not m or m.end(1) < lower_break_limit:
        # no suitable word break found
        # cutting at an arbitrary location,
        # or if len(tweet) < lower_break_limit, this will be true and
        # returning this still gives the desired result
        return tweet[:limit] + footer
    return m.group(1) + footer
0
ответ дан 3 December 2019 в 20:42
поделиться

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

7
ответ дан 3 December 2019 в 20:42
поделиться

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

Итак, в классе Foo , возможно, вам понадобится статическая переменная fooCounter , чтобы отслеживать, сколько экземпляров Foo было создано. (Сейчас мы просто проигнорируем безопасность потоков.)

public class Foo {
    private static var fooCounter:int = 0;

    public function Foo() {
        super();
        fooCounter++;
    }

    public static function howManyFoos():int {
        return fooCounter;
    }
}

Итак, каждый раз, когда вы создаете new Foo () в приведенном выше примере, счетчик увеличивается. ( См. Здесь MS stdint.h .) Одна из проблем здесь состоит в том, что C ++ технически нуждается только в совместимости с C89, чтобы быть соответствующей реализацией; даже для простого C C99 не поддерживается полностью даже в 2009 году.

Также неверно говорить, что для char нет спецификации ширины. Да, в стандарте просто не говорится, подписан он или нет. Вот что на самом деле говорит C99:

5
ответ дан 3 December 2019 в 20:42
поделиться

Я опробовал решение с pyapns для push-уведомлений и просто хотел поделиться тем, что работает для меня. Проблема, которую у меня имел, это то, что усеченное на 256 байтах в UTF-8 приведет к снижению уведомления. Я должен был убедиться, что уведомление закодировано как «Unicode_escape», чтобы получить его на работу. Я предполагаю, что это потому, что результат отправляется как JSON, а не RAW UTF-8. В любом случае, вот функция, которая работала для меня:

def unicode_truncate(s, length, encoding='unicode_escape'):
    encoded = s.encode(encoding)[:length]
    return encoded.decode(encoding, 'ignore')
2
ответ дан 3 December 2019 в 20:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: