texto - limitar caracteres en php
Cómo dividir caracteres Tamil en una cadena en PHP (2)
¿Cómo divido los caracteres Tamil en una cadena?
Cuando uso preg_match_all(''/./u'', $str, $results)
,
Obtengo los caracteres "த", "ம", "ி", "ழ" y "்".
¿Cómo obtengo los caracteres combinados "த", "மி" y "ழ்"?
Creo que deberías poder usar la función grapheme_extract para iterar sobre los caracteres combinados (que técnicamente se llaman "clústeres de grafemas").
Alternativamente, si prefiere el enfoque de expresiones regulares, creo que puede usar esto:
preg_match_all(''//pL/pM*|./u'', $str, $results)
donde /pL
significa una "letra" Unicode, y /pM
significa una "marca" Unicode.
(Descargo de responsabilidad: no he probado ninguno de estos enfoques).
si entiendo su pregunta correctamente, ¿tiene una cadena Unicode que contiene puntos de código, y desea convertir esto en una matriz de grafos?
Estoy trabajando en el desarrollo de una biblioteca de código abierto de Python para realizar tareas como esta en un sitio web de Tamil Language .
No he usado PHP desde hace un tiempo, así que publicaré la lógica. Puede echar un vistazo al código en la función split_letters () del archivo amuthaa / TamilWord.py .
Como mencionó el ruakh, los grafemas tamil se construyen como puntos de código.
Las vocales (உயிர் எழுத்து), aytham (ஆய்த ஃ்து - ஃ) y todas las combinaciones ((உயிர்த ஃ்து) en la columna ''a'' (அ வரி - க), es decir, க, ச, ட, ட, த, ற, ச, ச, ட, த, ற, ச, ச, ட, ப, ற, ச ஞ, ண, ம, ன, ய, ர, ள, ள, ழ, ல) usan cada uno un solo punto de código.
Cada consonante se compone de dos puntos de código: la letra a-combination + the pulli. Ej. ப் = ப + ்
Todas las combinaciones que no sean a-combinaciones también se componen de dos puntos de código: la letra a-combinación + una marca: por ejemplo, பி = ப் + ி, + ி, தை = த +
Entonces, si tu lógica va a ser algo como esto:
initialize an empty array
for each codepoint in word:
if the codepoint is a vowel, a-combination or aytham, it is also its grapheme, so add it to the array
otherwise, the codepoint is a marking such as the pulli (i.e. ்) or one of the combination extensions (e.g. ி or ை), so append it to the end of the last element of the array
Por supuesto, esto supone que la cuerda está bien formada y no tiene dos marcas consecutivas.
Aquí está el código de Python, en caso de que lo encuentre útil. Si quiere ayudarnos a portar esto a PHP, hágamelo saber también:
@staticmethod
def split_letters(word=u''''):
""" Returns the graphemes (i.e. the Tamil characters) in a given word as a list """
# ensure that the word is a valid word
TamilWord.validate(word)
# list (which will be returned to user)
letters = []
# a tuple of all combination endings and of all அ combinations
combination_endings = TamilLetter.get_combination_endings()
a_combinations = TamilLetter.get_combination_column(u''அ'').values()
# loop through each codepoint in the input string
for codepoint in word:
# if codepoint is an அ combination, a vowel, aytham or a space,
# add it to the list
if codepoint in a_combinations or /
TamilLetter.is_whitespace(codepoint) or /
TamilLetter.is_vowel(codepoint) or /
TamilLetter.is_aytham(codepoint):
letters.append(codepoint)
# if codepoint is a combination ending or a pulli (''்''), add it
# to the end of the previously-added codepoint
elif codepoint in combination_endings or /
codepoint == TamilLetter.get_pulli():
# ensure that at least one character already exists
if len(letters) > 0:
letters[-1] = letters[-1] + codepoint
# otherwise raise an Error. However, validate_word()
# should catch this
else:
raise ValueError("""%s cannot be first character of a word""" % (codepoint))
return letters