A writing tool in Processing that assists you in composing word squares.
produced by: Jérémie Wenger
This simple word square generator allows one to produce short texts constrained in the following way: choose a definite length (3, 4, 5 or 6 letters provided so far), pick an initial word, followed by two vertical words (on the left and the right sides of the square), before going through the rest of the horizontal words to complete the square. Each step of the way, the machine will provide the writer with all the possible words given the list of word and constraint at hand; it is also possible to go back step by step by erasing previously chosen words, and find some other path. This textual form is situated between the most constrained ones (where, for instance, even the middle columns ought to be words, or where a palindromic dimension is added, such as in the famous Sator Square) and a looser concatenation of a number of equally long words. It remains high on a scale of literary abstraction, as meaning can mostly be produced through semantic associations and echoes, as syntax has been almost entirely set aside. This tool, despite its relative cumbersomeness of use, greatly facilitates the exploration of a highly constrained form such as this one, reducing what would have been dictionary search time to next to nothing, and on the contrary forcing the writer to face its lexical limitations (the word lists have been extracted from the website litscape.com, and are the most extended this source can offer).
Apart from the Sator Square mentioned above, an interesting, and far more elaborate precedent are Georges Perec's Alphabets, in which poems are written in squares of 11 11-lettered lines (with a constraint on the letters available for writing).
The program works in a series of stages, from the first word to the last, each time selecting letters and performing searches on lists of words provided by the user (imagine you are at line 3, the first and last letters could be 'b' and 'm', then the program would find all possible words starting and ending with those letters, among which you could scroll and then pick one before going on to the next stage). The main technical difficulty consisted in making sure the different steps would run smoothly and without errors, and that it would be possible to go back in the procedure, again without errors, to be able to modify previous words if they lead to a dead end (a line without any possible match).
As such, this tool is not strictly speaking generative: ultimate control remains within the writer, who must choose words and find its way among possibilities to produce a final text. It was partly a choice (it seems important to me that aesthetic and semantic choices are made when writing), and partly a technical issue: the next step could be to try and come up with a tool that can generate squares with stricter constraints, for instance ones where all columns as well as all lines are words present in a given list. This time, it would not be possible to go through possibilities as in the present case, and a generative approach might be more fruitful, namely one where the computer generates many of these squares, and artistic agency is reduced to picking the salient, beautiful, powerful or intriguing ones within the mass of possibilities. It seems that a recursive approach, which would take one or two initial words, and would then perform a search within the largest square embedded in the initial one, and so recursively, could yield the desired result. Visually, that would mean:
A B C
D E F
G H I
Which would then be reduced to
Ending with only the letter at spot I. The computer would perform a search at these levels but incorporating the constraints imposed by the previous words, and that would (hopefully) reduce the amount of searches required (as opposed to just browsing randomly).
Another line of research would consist in embedding squares within other squares, and thus using letters as edges of the smaller square: in the example above, one could say that between the B, C, E and F one could start a new, smaller square, with x number of letters per word and x words, which would be nested within the initial text.