Philippe Verdy said: > If we don't limit the backwards reordering, then all accents in the > full sentences will be reordered, so this is the final word that will > drive the order. not only this is incorrect,
I understand that you think that the ordering should be done word-by-word, with the French accent consideration being done backward only within the scope of the individual word comparisons, but... > ... but having to fully > reorder the secondary weights in the full sentence has a significant > memory and performance impact, when we could just limit ourself to > comparing the sentences word by word, starting from the beginning of > each sentence. That claim is simply wrong. A. If you are *storing* keys, then the memory size of the resultant keys is no larger for a (well-designed) backwards French accent collation, than for forward accent collation. And then the comparison time for binary comparison of the full-formed keys is also no different, on average. B. If you are doing *incremental* comparisons, then it would be foolish to construct entire keys and scan all the way to the end of long strings looking for accents to reverse, before making comparison decisions based on primary weights at the beginning of strings. Any well-designed incremental UCA string comparison should be checking primary values distinctly from secondary values *incrementally*, so that a difference, say, between "d" and "e" in the first character does not wait for determination of the presence or absence of an accent at the end of a string -- perhaps 250 positions down the string or more -- before deciding the order relation between the two strings. Yes, in the incremental comparison case, there *is* an additional cost for processing for backwards accents, but it only tends to be significant for the relatively unusual cases of comparison of strings which are all equal at the primary level and which only differ by accents. And doing string compares word by word introduces its own level of complication into comparison operations, so it is not at all obvious that processing that way would improve performance over an incremental comparison without word boundaries. > Such case will often occur when sorting article names (e.g. in > Wikipédia), book and movie titles... And when there will be list of > people names, where the first (given) name is placed after the last > (birth) name, separated by a comma, or when sorting titles with an > additional precision at end between parenthèses (such as a country > name to disambiguate city names, e.g. in Wikipédia) : Names of people in comma-delimited lists, possibly. But I challenge you to provide some real world examples of your last case -- where you have some pair of city names that differ *only* by accent placement, disambiguated by a following parenthetical country (or region, or whatever, I don't care) name, where the country names *also* only differ by accent placement. And if you come up with such an example, explain how likely it is that anyone using such a list, amongst a list of thousands others like it, would be to notice that there was a backwards accent weighting issue in the order of the two entries. > These final precisions (added in separate words) clearly have a low > priority in the sort order, so the backwards reordering should really > not place them with a higher priority in the secondary collation > level. Theoretically, perhaps. But practically this will make no difference, I predict. > If we use a word breaker, not only the sort order will be > correct, but we will also gain performance (due to shorter buffering > of collation weights, we don't necessarily have to process all the > strings completely, but just the beginning most of the time). Not true. See the discussion above. > So when you snipped completely the discussion about word-breaking > within collation, you completely forgot the main point of my message: I will remind you that I was not responding to *you*, Philippe, when I responded to CE Whitehead. So I wasn't forgetting your main point at all -- just not responding to it. > that the UCA algorithm does not include any entry points for insering > a word breaker within the algorithm (or any custom breaker that a > tailored collation would need, for example in a complex tailoring that > would recognize space-separated particles in proper names, as if this > space had a lower difference than a true word-separation) Yes, we can take it as stipulated that the UCA algorithm "does not include any entry points for inser[t]ing a word breaker within the algorithm." That was by design, as the algorithm is designed for collation of strings -- not for word-by-word collation of delimited, structured text. > Yes using a breaker in UCA collation is clearly optional Yes, anyone who wants to enhance UCA collation to implement collation that takes into account word-by-word behavior can clearly do so. > (and not > absolutely needed if all levels are forewards in some language, as it > will have no visible effect on the collation order except for > increased performance), but it's absolutely essential if we use any > backwards reordering at any level. I disagree with that assessment. > The absence of the word-breaker makes the current UCA algorithm > unusable for French in practice (and also very costly in terms of > space, and unnecessarily slow), when sorting lists of items longer > than a single word Figures, please, to back up that claim. > : it can only work in practice when sorting basic > dictionary entries (for example it works extremely well when sorting > French Wiktionary categories, but it fails miserably when sorting > French Wikipedia categories, for which the expected backwards ordering > of level 2 has to become forewards, even if this gives non-optimal > sorts within some small groups of article titles). Quantify "fails miserably", when the correctness issue you cite would only apply in cases in comparison of strings which otherwise have no primary differences at all. > And that's why I request comments about the effect of the backwards > ordering, the way it is currently specified. What comments are you requesting, exactly? If they are along the lines of what you have just claimed in this note, then I can predict you are going to find considerable disagreement. > But also because it can significantly improve the performance of > collation, even for English or Korean when comparing sentences (using > a syntaxic/lexical/morphologic/syllabic breaker, you just need to > compute the collation-strings for each word/syllable/morpheme > separately, starting from the beginning, Again, I don't know where you are getting these claims. If you are computing whole keys for storage, there are no significant differences. If you are doing *incremental* string comparison, such an algorithm *already* is optimized to make order determinations as early in a string as possible. If you force word-by-word comparison, you are likely to actually *slow down* string comparison, as compared to an optimized incremental string comparison, as you then need to parse off each unit (word or whatever, by whatever criterion), then compute a key for each pair, and compare the keys. That is significantly *more* processing than a well-optimized incremental string comparison. If you think otherwise, then I'd suggest you provide an actual algorithm for doing the kind of processing you envision here, and let people analyze the algorithm to see if it could actually out-perform incremental string comparisons for the same input. I'm not denying that there are cases where word-by-word (or other kinds of unit) comparisons are actually desirable -- I just don't buy your argument that this is a route for improved comparison speed over UCA, even with French rules for backwards accent comparison. > and the breaker can also be > used to discard non significant parts of sentence, such as included > parts between parentheses). Huh? That is just preprocessing to delete portions of strings before calculating keys. If you want to do so, be my guest, but building in arbitrary rules of content suppression into the UCA algorithm itself is a non-starter. --Ken